python opencv怎么检测到人脸
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章主要讲解了"python opencv怎么检测到人脸",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python opencv怎么检测到人脸"吧
千家信息网最后更新 2024年11月30日python opencv怎么检测到人脸程序如何检测到人脸
这篇文章主要讲解了"python opencv怎么检测到人脸",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python opencv怎么检测到人脸"吧!
人脸的识别当然方法很多啦,尤其是二寸照片这么简单直接的类型。不过实在没必要人脸检测,可以再观察下照片:
除了背景的蓝色就是衣服的白色后者头发的黑色还有皮肤的黄色,所以很好区分的嘛,可以利用直方图反投影,关于直方图反投影不清楚的可以点这篇:唉,再再再学一下直方图:直方图反投影
int main()
{
//【1】读取原图片以及投影模板
Mat srcImage, dstImage;
srcImage = imread("肖像.jpg",33);
imshow("原图", srcImage);
Mat RoiImage = imread("投影模板.png");
//【2】转HSV模型
Mat HsvImage, RoiImage_HSV;
cvtColor(srcImage, HsvImage, COLOR_BGR2HSV);
cvtColor(RoiImage, RoiImage_HSV, COLOR_BGR2HSV);
//【3】计算公路的直方图
MatND roiHist; //直方图对象
int dims = 2; //特征数目(直方图维度)
float hranges[] = { 0,180 }; //特征空间的取值范围
float Sranges[] = { 0,256 };
const float *ranges[] = { hranges,Sranges };
int size[] = { 20,32 }; //存放每个维度的直方图的尺寸的数组
int channels[] = { 0,1 }; //通道数
calcHist(&RoiImage_HSV, 1, channels, Mat(), roiHist, dims, size, ranges);
//【4】直方图归一化
normalize(roiHist, roiHist, 0, 255, NORM_MINMAX);
//【5】反向投影
Mat proImage; //投影输出图像
calcBackProject(&HsvImage, 1, channels, roiHist, proImage, ranges);
imshow("投影", proImage);
//图像掩码Mask操作
Mat maskImage;
threshold(proImage, maskImage, 1, 255, THRESH_BINARY);//对mask进行二值化,将mask进一步处理
imshow("二值腌膜", maskImage);
dstImage = Mat::zeros(srcImage.size(), CV_8UC3);
srcImage.copyTo(dstImage, maskImage);
imshow("掩码操作", dstImage);
waitKey();
return 0;
}
这段代码就是利用直方图得到了一幅mask图像,其中人脸部分为255,其余部分为0:
左图为直方图反投影之后得到的投影(灰度图),右图为对投影图进行二值化后得到的二值mask。
之后调用自定义打码函数对标记mask区域进行打码:
//自定义打码函数 Mat MosaicImage = trans2Mosaic(srcImage, maskImage, 10); imshow("马赛克效果图", MosaicImage);
是不是很好看!感觉我就像变成了X战警钻石女王那样似的~
自定义函数代码,函数输入顺次为原图,图像腌膜,马赛克大小:
//原图,腌膜,马赛克大小Mat trans2Mosaic(Mat srcImage, Mat maskImage, int half_patch) { Point2d point;// Mat frame, mask; srcImage.copyTo(frame); maskImage.copyTo(mask); int height = frame.rows;//获取图像的长宽 int width = frame.cols; //遍历图像,步长为马赛克大小 for (int x = 0; x < height; x = x + half_patch) { for (int y = 0; y < width; y = y + half_patch) { //如果不是标记区域,则跳过 if (mask.at(x, y) ==0 ) { continue; } else { //如果是标记区域,对像素进行重赋值 int b = theRNG().uniform(0, 255); int g = theRNG().uniform(0, 255); int r = theRNG().uniform(0, 255); for (int dx = 0; dx < half_patch; dx++) { for (int dy = 0; dy < half_patch; dy++) { frame.at (x + dx, y + dy)[0] = (uchar)b; frame.at (x + dx, y + dy)[1] = (uchar)g; frame.at (x + dx, y + dy)[2] = (uchar)r; } } } } } return frame;}
该函数思路很简单,就是遍历图像像素点,遍历的步长为自定义的马赛克大小,然后判断该像素点是否属于标记(人脸)区域,否则跳过,是则以改点为起点遍历改点左侧以及下侧一个马赛克大小的区域,并将该区域像素随机赋值。
感谢各位的阅读,以上就是"python opencv怎么检测到人脸"的内容了,经过本文的学习后,相信大家对python opencv怎么检测到人脸这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
直方图
投影
人脸
图像
检测
马赛克
马赛
函数
区域
大小
像素
就是
标记
原图
学习
代码
内容
思路
模板
照片
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
课程表管理系统数据库
网络安全进军营新闻
网络安全员知识竞赛题目
联想服务器管理口密码忘记了
学校开展网络安全宣传日活动总结
考银行的软件开发
cf转服务器需要多少钱
数据库安装什么环境
海南聊天软件开发公司
嵌入式软件开发可以学习吗
黑客入侵app的服务器
恰星网络技术
找源服务器
肿瘤靶向药数据库
服务器guid无法查询
项目文档编目管理软件开发
服务器创建共享文件夹
大数和软件开发那个好
用微信登录的原神是什么服务器
数据库设置控件导向
soul各个星球数据库一样吗
查看远程服务器端口
管家婆数据库怎么导出导入
杭州五十码网络技术有限公司
甘肃服务器机柜
溧水区软件开发创新服务
在北京做软件开发
控制软件开发转行算法开发
浙江广东网络安全培训要怎么学
服务器游戏缓存