python opencv怎么检测到人脸
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要讲解了"python opencv怎么检测到人脸",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python opencv怎么检测到人脸"吧
千家信息网最后更新 2025年12月01日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安全错误
数据库的锁怎样保障安全
数据库前端界面用什么最好
flask 创建数据库和表
网络安全的考研作文
洗车app软件开发
中兴通讯南京基地软件开发怎么样
数据库插入数据过程中建表
公务员网络安全和信息化的区别
移动网络技术做什么
jsp怎么将数据存到数据库
朋友圈商城软件开发
北京专业服务器价格
韩国下电影服务器
2015国家网络安全宣传周
数据库怎么设计柱状图
浦东新区数据软件开发采购
对联合国提建议关于网络安全
poe英文数据库
数据库表与自己的链接称为什么
MMC数据库什么时候成立的
广州软件开发定制需要多少钱
百度在线网络技术公司官网
网络安全所面临的挑战
诺奖得主指责中国网络安全
arcgis复制数据库失败
如何通过qt到数据库
平台软件开发技术方案
浦东新区数据软件开发采购
网络安全分级及措施
网络安全大学毕业好找工作吗
网络安全机制5个可控性