python opencv怎么检测到人脸
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"python opencv怎么检测到人脸",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python opencv怎么检测到人脸"吧
千家信息网最后更新 2026年10月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安全错误
数据库的锁怎样保障安全
互联网络科技
蓝思科技飞鸽互联网
科技与互联网
与互联网科技公司
互联网科技的发展
金融科技与互联网金融
奇酷互联网科技
互联网科技公司官网
奇士达互联网科技
天下捷融互联网科技
互联网金融 科技创新
互联网科技论坛
成都仁贤领冠互联网科技有限公司
阿大互联网科技有限公司
互联网5g黑科技有哪些
广州百诚互联网科技有限公司官网
富国互联网科技002692
风投北京互联网科技
济南小医互联网科技有限公司招聘
黑龙江互联网科技公司
互联网科技工作委员会副主任毛军
互联网科技公司发展
互联网科技小贷
互联网科技公司电话
互联网科技公司需要的职位
互联网科技项目计划书材料类
智帮互联网科技公司最近动向
工业互联网科技创业
北京互联网科技类企业分布
好易买互联网科技