#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
char* cascade_name = "E:/data/training/data/cascade.xml";
CascadeClassifier cascade;
String window_name = "Capture";
void detectFace(Mat frame);
int main(int argc, char *argv[])
{
int currentFrame = 1;
VideoCapture cap("5.avi");
if (!cap.isOpened())
{
return -1;
}
if (!cascade.load(cascade_name))
{
cout << "Error: cannot load face casade!!!" << endl;
return -2;
}
Mat frame;
while (1)
{
cap>>frame;
if (frame.empty())
{
break;
}
resize(frame,frame,Size(336,256));
imshow("原图像", frame);
cvtColor(frame, gray, CV_BGR2GRAY);
namedWindow(window_name);//创建窗口
detectFace(gray);//对帧图像进行处理,识别
waitKey(125);
}
return 0;
}
void detectFace(Mat frame)
{
Mat frame_gray;
vector<Rect> face;
//cvtColor(frame, frame_gray, COLOR_BGR2GRAY);//转成灰度图像
frame_gray = frame.clone();
equalizeHist(frame_gray, frame_gray);//直方图均衡化
//按照文档说明调用函数即可
cascade.detectMultiScale(frame_gray, face, 1.1, 2, CASCADE_SCALE_IMAGE, Size(30, 30));
//遍历所有目标
for (size_t i = 0; i < face.size(); i++)
{
//根据返回的Rect的x坐标、y坐标、宽width和高height算出中心位置
Point center(face[i].x + face[i].width/2, face[i].y + face[i].height/2);
//调用ellipse画出椭圆型边框,指示人脸
ellipse(frame, center, Size(face[i].width/2, face[i].height/2), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
}
//最后刷新窗口,显示图像
imshow(window_name, frame);
}
将自己生成的cascade.xml模型,导入工程中
猜你喜欢
转载自blog.csdn.net/red_ear/article/details/83856551
今日推荐
周排行