版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mengxiang2425/article/details/82559245
这里开启摄像头并查找摄像头范围内分类器的图片
直接上代码:
#include "opencv2\opencv.hpp"
#include "cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
CvCapture* capture;
if (argc == 1) {
capture = cvCreateCameraCapture(0);
}
string xmlPath = "cascade.xml";
CascadeClassifier ccf; //创建分类器对象
Mat img;
while (1)
{
img = cvQueryFrame(capture);
// Mat img = imread("test11.bmp");//目标检测图片
if (!ccf.load(xmlPath)) //加载训练文件
{
cout << "Can not load the xml file." << endl;
return 0;
}
vector<Rect> faces; //创建一个容器保存检测出来的脸
Mat gray;
cvtColor(img, gray, CV_BGR2GRAY);//灰度图转化,提取Haar特征
equalizeHist(gray, gray); //直方图均衡
//resize(gray, gray, Size(128, 128), 0, 0, CV_INTER_LINEAR);
ccf.detectMultiScale(gray, faces, 1.1, 3, 0, Size(115, 100), gray.size()); //检测脸,此处的Size(x,y)参数x,y检测前需调整到合适数值
for (vector<Rect>::const_iterator iter = faces.begin(); iter != faces.end(); iter++)
{
rectangle(img, *iter, Scalar(0, 155, 255), 2, 8); //画出脸部矩形
}
imshow("test", img);
waitKey(30);
}
cvReleaseCapture(&capture);
cvDestroyWindow("test");
}
注意:正样本除了柱子其他的背景最好去掉,不然训练出来的效果有时候会识别到一部分背景。负样本尽量是开摄像头时候的背景。