一、开发环境配置和上一篇文章一样
请参考环境配置
二、代码
#include <QCoreApplication>
#include <vector>
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
VideoCapture cap(0); //定义摄像头对象
namedWindow("image1",CV_WINDOW_AUTOSIZE); //定义显示窗口
CascadeClassifier cascade; //定义级联分类器
bool ret = cascade.load("D:\\MOZI\\QTDemo\\QtDemo\\haarcascade_frontalface_alt2.xml"); //导入OpenCV自带训练好的分类器
if(ret==false){
cout<<"Load xml file faild"<<endl;
return -1;
}
Mat rgbImage ; //源图像
Mat grayImage; //转化后的灰度图
vector<Rect> faces; //检测到的脸部矩形框
while(1){
cap>>rgbImage; //捕获一帧
cvtColor(rgbImage,grayImage,CV_RGB2GRAY); //转化为灰度图
cascade.detectMultiScale(grayImage,faces,1.1,4, //利用级联分类器进行检测,参数:1、目标灰度图像;
CV_HAAR_DO_ROUGH_SEARCH, //2、脸部矩形向量容器;3、检测时的缩放比例;
Size(30,30),Size(500,500)); //4、一个目标经过多少次检测到,才算是真正检测到;
//5、检测算法标志;
//6、虽小尺寸;7、最大尺寸
cout<<" Detected "<<faces.size()<<" faces "<<endl;
rectangle(rgbImage,faces[0],Scalar(255,0,0),2,8,0);//在原图像画出脸部矩形框
imshow("image1",rgbImage); //显示一帧图像
waitKey(30); //延时30ms
}
return a.exec();
}
三、Bug fixed
使用的编译器为MSVC2015 64bit, 项目在Debug版本进行编译运行不成功,而改为Release版本可正常运行,经测试MSVC2013 64bit编译器也是同样的问题。据说是OpenCV的兼容性问题导致,在Linux下就不会有这样的Bug。