訓練分類器總結篇(2)
阿新 • • 發佈:2019-01-08
這裡開啟攝像頭並查詢攝像頭範圍內分類器的圖片
直接上程式碼:
#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"); }
注意:正樣本除了柱子其他的背景最好去掉,不然訓練出來的效果有時候會識別到一部分背景。負樣本儘量是開攝像頭時候的背景。