python opencv怎么检测到人脸
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要讲解了"python opencv怎么检测到人脸",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python opencv怎么检测到人脸"吧
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
提供网络技术支持罪量刑标准
技嘉网络安全事件
独立服务器网卡
2兆服务器
黑客对抗网络安全官
u8服务器登录系统管理很卡
mysql数据库是什么型
软件开发投标报名流程图
比较几种软件开发方法的优点
网安大队可以查酒店网络安全吗
刀片服务器维修报价表
杭州顺道网络技术有限公司
微信网络安全师
晋中软件开发
奉贤区个人软件开发创新服务
我的世界密室逃脱服务器推荐
软件开发横刀图
幻塔哪个服务器人少
租用服务器需要特许经营吗
播放关于网络安全教育的手抄报
数据库完成后是个什么界面
技嘉网络安全事件
软件开发类毕业论文结构
r230服务器散热报警
高二网络技术应用教材分析
数据库 801端口
vivo相册数据库是什么
mirna对应疾病数据库
网络安全中的socket
杭州顺道网络技术有限公司