1. 程式人生 > >訓練分類器總結篇(2)

訓練分類器總結篇(2)

這裡開啟攝像頭並查詢攝像頭範圍內分類器的圖片

直接上程式碼:

#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");
}

注意:正樣本除了柱子其他的背景最好去掉,不然訓練出來的效果有時候會識別到一部分背景。負樣本儘量是開攝像頭時候的背景。