#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/calib3d/calib3d.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat image, image_gray; //定义两个Mat变量,用于存储每一帧的图像
image = imread("mv4.jpg");
// imshow("原图", image);
// waitKey(2000); //2秒关闭
cvtColor(image, image_gray, CV_BGR2GRAY); //颜色空间转换
equalizeHist(image_gray, image_gray); //直方图均衡化来增强对比度 ,适合对比度低的
CascadeClassifier eye_Classifier; //载入分类器
CascadeClassifier face_cascade;
if (!eye_Classifier.load("./haarcascade_eye.xml")) //把xml文档复制到现在用的文件夹下
{
cout << "导入haarcascade_eye.xml时出错 !" << endl;
return 0;
}
if (!face_cascade.load("./haarcascade_frontalface_alt.xml"))
{
cout << "导入haarcascade_frontalface_alt.xml时出错 !" << endl;
return 0;
}
vector<Rect> eyeRect; //模板实例化:是对一批仅仅成员数据类型不同的类的抽象,
//程序员只要为这一批类所组成的整个类家族创建一个类模板,给
//出一套程序代码,就可以用来生成多种具体的类,
//(这类可以看作是类模板的实例),从而大大提高编程的效率。
vector<Rect> faceRect;
eye_Classifier.detectMultiScale(image_gray,eyeRect,1.1,3,0 | CV_HAAR_SCALE_IMAGE,Size(30,30)); //具体看笔记
for (size_t eyeIdx = 0;eyeIdx < eyeRect.size();eyeIdx++) //eyeidx是啥,哪来的
{
rectangle(image, eyeRect[eyeIdx], Scalar(0, 0, 255)); //用矩形画出检测到的眼睛的位置(黑色)
}
face_cascade.detectMultiScale(image_gray, faceRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < faceRect.size(); i++)
{
rectangle(image, faceRect[i], Scalar(0, 255, 255)); //用矩形画出检测到脸部的位置(黄色)
}
namedWindow("人脸识别", 2);
imshow("人脸识别",image); //显示当前
waitKey();
return 0;
}
cd 到你用的文件夹
cd 文件夹 我的是mv.cpp
g++ mv.cpp -o mv `pkg-config --cflags --libs opencv`
./mv
图像识别结束