使用OpenCV_CascadeClassifier实现人脸及眼睛检测

分类器CascadeClassifier是Opencv的一个类,主要有两个成员函数:
一个是Load()函数,主要用来读取分类使用的文本,Opencv自带一套使用的人脸及特征检测的文本。
还有一个是void detectMultiScale( InputArray image,
CV_OUT std::vector & objects,
double scaleFactor = 1.1,
int minNeighbors = 3, int flags = 0,
Size minSize = Size(),
Size maxSize = Size() );
此函数用于检测特征,以下为主要参数说明
参数1:输入图片
参数2:输出找到的特征的外接矩形数组,如vector faces;
参数3:图片放缩比例,一般默认
参数4:相邻特征矩形最小的像素差

下面程序中,首先对人脸进行检测,检测到人脸特征后对于人脸部位,进一步检测眼睛
在这里插入图片描述
在这里插入图片描述

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;



//主函数
int main()
{
	Mat img;
	namedWindow("detected");
	img = imread("2.jpg");
	vector<Rect>faces;
	CascadeClassifier classifier_face;
	classifier_face.load("haarcascade_frontalface_default.xml");
	classifier_face.detectMultiScale(img,faces,1.1,3);

	vector<Rect>eyes;
	CascadeClassifier classifier_eye;
	classifier_eye.load("haarcascade_eye.xml");


	if (faces.size())
	{
		for (int i = 0; i < faces.size(); i++)
		{
			cv::rectangle(img, faces[i], Scalar(255, 0, 0));
			Mat faceimg = img(faces[i]);
			classifier_eye.detectMultiScale(faceimg, eyes, 1.1, 3);
			if(eyes.size())
			{
				for (int j = 0; j < eyes.size(); j++)
				{
					Rect tmpRect;
					tmpRect.x = faces[i].x + eyes[j].x;
					tmpRect.y = faces[i].y + eyes[j].y;
					tmpRect.width = eyes[j].width;
					tmpRect.height = eyes[j].height;
					cv::rectangle(img, tmpRect, Scalar(0, 255, 0));
				}
			}
		}
		imshow("detected", img);
		waitKey();

	}
	else
		cout << "Not face detected";
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Python中的OpenCV检测人脸眼睛,可以按照以下步骤操作: 1. 安装OpenCV库: ``` pip install opencv-python ``` 2. 下载并导入人脸眼睛检测器: ```python import cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') ``` 3. 读取图像并将其转换为灰度: ```python img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ``` 4. 使用人脸检测检测人脸: ```python faces = face_cascade.detectMultiScale(gray, 1.3, 5) ``` 5. 对于每个检测到的人脸使用眼睛检测检测眼睛: ```python for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) # 在图像上绘制矩形框 roi_gray = gray[y:y+h, x:x+w] # 灰度图像中的人脸区域 roi_color = img[y:y+h, x:x+w] # 原始图像中的人脸区域 eyes = eye_cascade.detectMultiScale(roi_gray) for (ex,ey,ew,eh) in eyes: cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) # 在人脸区域中绘制眼睛矩形框 ``` 6. 显示结果: ```python cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 完整代码如下: ```python import cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex,ey,ew,eh) in eyes: cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值