概述
opencv 结合 鼻子、眼睛、脸部 --人脸检测源代码
先看一下运行结果:
源代码:
#include "opencv2opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("Lena.jpg"); //MultiFaces01 shoudong-pu2 shouhua-pu Baboon Lena p1
// //检测鼻子
string xmlPath2 = "haarcascade_mcs_nose.xml"; //haarcascade_mcs_nose.xml haarcascade_frontalface_default.xml
CascadeClassifier ccf2; //创建分类器对象
if (!ccf2.load(xmlPath2)) //加载训练文件
{
cout << "不能加载指定的xml文件" << endl;
return 0;
}
vector<Rect> faces2; //创建一个容器保存检测出来的脸
Mat gray2;
cvtColor(img, gray2, CV_BGR2GRAY); //转换成灰度图,因为harr特征从灰度图中提取
equalizeHist(gray2, gray2); //直方图均衡行
ccf2.detectMultiScale(gray2, faces2, 1.1, 3, 0, Size(30, 30), Size(100, 100));//检测鼻子
for (vector<Rect>::const_iterator iter = faces2.begin(); iter != faces2.end(); iter++)
{
rectangle(img, *iter, Scalar(0, 0, 255), 2, 8); //画出鼻子矩形
}
//
// //检测眼睛
string xmlPath3 = "haarcascade_eye.xml"; //haarcascade_mcs_nose.xml haarcascade_frontalface_default.xml
CascadeClassifier ccf3; //创建分类器对象
if (!ccf3.load(xmlPath3)) //加载训练文件
{
cout << "不能加载指定的xml文件" << endl;
return 0;
}
vector<Rect> faces3; //创建一个容器保存检测出来的脸
Mat gray3;
cvtColor(img, gray3, CV_BGR2GRAY); //转换成灰度图,因为harr特征从灰度图中提取
equalizeHist(gray3, gray3); //直方图均衡行
ccf3.detectMultiScale(gray3, faces3, 1.1, 3, 0, Size(30, 30), Size(100, 100));//检测眼睛
for (vector<Rect>::const_iterator iter = faces3.begin(); iter != faces3.end(); iter++)
{
rectangle(img, *iter, Scalar(0, 0, 255), 2, 8); //画出眼睛矩形
}
//
/// //检测人脸
string xmlPath= "haarcascade_frontalface_default.xml"; //haarcascade_mcs_nose.xml haarcascade_frontalface_default.xml
CascadeClassifier ccf; //创建分类器对象
if (!ccf.load(xmlPath)) //加载训练文件
{
cout << "不能加载指定的xml文件" << endl;
return 0;
}
vector<Rect> faces; //创建一个容器保存检测出来的脸
Mat gray;
cvtColor(img, gray, CV_BGR2GRAY); //转换成灰度图,因为harr特征从灰度图中提取
equalizeHist(gray, gray); //直方图均衡行
ccf.detectMultiScale(gray, faces, 1.1, 3, 0, Size(70, 70), Size(420, 420)); //检测人脸
for (vector<Rect>::const_iterator iter = faces.begin(); iter != faces.end(); iter++)
{
rectangle(img, *iter, Scalar(0, 0, 255), 2, 8); //画出脸部矩形
}
imshow("faces", img);
waitKey(0);
return 1;
}
注意:1.本人试验环境:vs2015+opencv2.4.9 / vs2015+opencv3.4 运行都是可以的。
2. ccf.detectMultiScale(gray, faces, 1.1, 3, 0, Size(70, 70), Size(420, 420)); //检测人脸
Size(70, 70) 为最小检测区域, Size(420, 420) 为最大检测区域。根据不同图片的大小、像素,进行调整,达到最佳效果。
3. opencv 中有训练的模型,在 .....opencvbuildetchaarcascades
string xmlPath2 = "haarcascade_mcs_nose.xml"; //检测鼻子模型
string xmlPath3 = "haarcascade_eye.xml"; //检测眼睛模型
string xmlPath= "haarcascade_frontalface_default.xml"; //检测人脸 模型
参考: opencv 静态图像 人脸检测
opencv 视频读取 (深入了解)
opencv 视频中人脸检测
希望对你有帮助。
最后
以上就是无限奇异果为你收集整理的opencv 结合 鼻子、眼睛、脸部 --人脸检测源代码 opencv 结合 鼻子、眼睛、脸部 --人脸检测源代码的全部内容,希望文章能够帮你解决opencv 结合 鼻子、眼睛、脸部 --人脸检测源代码 opencv 结合 鼻子、眼睛、脸部 --人脸检测源代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复