训练分类器总结篇(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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");
}

注意:正样本除了柱子其他的背景最好去掉,不然训练出来的效果有时候会识别到一部分背景。负样本尽量是开摄像头时候的背景。

猜你喜欢

转载自blog.csdn.net/mengxiang2425/article/details/82559245