我是靠谱客的博主 无限奇异果,最近开发中收集的这篇文章主要介绍opencv 结合 鼻子、眼睛、脸部 --人脸检测源代码                 opencv   结合 鼻子、眼睛、脸部 --人脸检测源代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

                 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   结合 鼻子、眼睛、脸部 --人脸检测源代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部