OpenCV人脸检测(完整源码+思路)
来源:互联网 发布:程序员书籍推荐 编辑:程序博客网 时间:2024/04/28 12:34
本博文IDE为vs2013
OpenCV2.49
话不多说,先看视频演示(20S演示):
如下:
https://v.youku.com/v_show/id_XMjYzMzkxMTYyMA==.html?spm=a2h0w.8278793.2736843.4#paction
程序截图如下:
如何来用OpenCV来实现能。
下面给出OpenCV实现人脸检测的一般步骤:
1.加载人脸检测器
2.开启摄像头
3.对图片进行灰度处理(其实可以不处理,上图中原图的标题栏就是未进行灰度处理进行的检测,这里的灰度是为下节人脸识别打基础)
4.对图片进行直方图均衡化(其实可以不处理,上图中原图的标题栏就是未进行灰度处理进行的检测和灰度图是为进行均衡化识别,这里的均衡化是为下节人脸识别打基础)
5.人脸检测
总结下,如果单单只要人脸检测,可以的步骤是1,2,5
本博客把1,2,5,
1,2,3,5
1,2,3,4,5
都演示了出来。
下面是完整的代码,本代码还有大量注释,在此不再具体说明哪个函数有什么用。
下面上源码:
#include <opencv.hpp>#include <opencv2/core/core.hpp>#include <iostream>using namespace cv;void Pic2Gray(Mat camerFrame,Mat &gray){//普通台式机3通道BGR,移动设备为4通道if (camerFrame.channels() == 3){cvtColor(camerFrame, gray, CV_BGR2GRAY);}else if (camerFrame.channels() == 4){cvtColor(camerFrame, gray, CV_BGRA2GRAY);}elsegray = camerFrame;}int main(){//加载Haar或LBP对象或人脸检测器CascadeClassifier faceDetector;std::string faceCascadeFilename = "haarcascade_frontalface_default.xml";//友好错误信息提示try{faceDetector.load(faceCascadeFilename);}catch (cv::Exception e){}if (faceDetector.empty()){std::cerr << "脸部检测器不能加载 (";std::cerr << faceCascadeFilename << ")!" << std::endl;exit(1);}//打开摄像头VideoCapture camera(0);while (true){Mat camerFrame;camera >> camerFrame;if (camerFrame.empty()){std::cerr << "无法获取摄像头图像" << std::endl;getchar();exit(1);}Mat displayedFrame(camerFrame.size(),CV_8UC3);//人脸检测只试用于灰度图像Mat gray;Pic2Gray(camerFrame, gray);//直方图均匀化(改善图像的对比度和亮度)Mat equalizedImg;equalizeHist(gray, equalizedImg);//人脸检测用Cascade Classifier::detectMultiScale来进行人脸检测int flags = CASCADE_FIND_BIGGEST_OBJECT|CASCADE_DO_ROUGH_SEARCH;//只检测脸最大的人//int flags = CASCADE_SCALE_IMAGE;//检测多个人Size minFeatureSize(30, 30);float searchScaleFactor = 1.1f;int minNeighbors = 4;std::vector<Rect> faces;faceDetector.detectMultiScale(equalizedImg, faces, searchScaleFactor, minNeighbors, flags, minFeatureSize);//画矩形框cv::Mat face;cv::Point text_lb;for (size_t i = 0; i < faces.size(); i++){if (faces[i].height > 0 && faces[i].width > 0){face = gray(faces[i]);text_lb = cv::Point(faces[i].x, faces[i].y);cv::rectangle(equalizedImg, faces[i], cv::Scalar(255, 0, 0), 1, 8, 0);cv::rectangle(gray, faces[i], cv::Scalar(255, 0, 0), 1, 8, 0);cv::rectangle(camerFrame, faces[i], cv::Scalar(255, 0, 0), 1, 8, 0);}}imshow("直方图均匀化", equalizedImg);imshow("灰度化", gray);imshow("原图", camerFrame);waitKey(20);}getchar();return 0;}
3 5
- OpenCV人脸检测(完整源码+思路)
- opencv 人脸检测源码解析
- 一个OpenCV实现的人脸检测的源码
- opencv 检测人脸
- opencv检测人脸
- 人脸检测 opencv
- OpenCV人脸检测
- opencv人脸检测
- OpenCV人脸检测
- OpenCv人脸检测
- opencv 人脸检测
- OpenCV人脸检测
- opencv人脸检测
- OpenCV人脸检测
- 人脸检测(opencv)
- opencv人脸检测
- opencv人脸检测
- opencv----人脸检测
- android 带EditView(编辑框)的AlertDialog(对话框)及获取输入内容
- Win Form窗口嵌入MFC窗口——方案分析
- 什么是GMS认证?
- Docker使用-OracleJDK
- 动态规划算法
- OpenCV人脸检测(完整源码+思路)
- 二叉搜索树和双向链表
- 第二次实验报告
- 批量转化文件夹下脚本或者脚本文件为UTF8格式
- Cocos2dx 获取安卓手机网络类型及强度,电量等信息
- OpenCV 2.4.10: createTrackbar()+getTrackbarPos()
- c++实验项目(实验报告)
- openstack 网络架构 nova-network + neutron
- php文章内容制作锚文本链接