【機器學習】最容易實現的基於OpenCV的人臉檢測程式碼、檢測器及檢測效果
阿新 • • 發佈:2018-11-07
基於opencv自帶的人臉檢測模型,實現簡單的人臉檢測功能,可作為機器學習初學者練手使用。簡單易學,具體的方法及程式碼如下。
1、執行結果
輸入原圖
輸出結果
2、工程需要載入的opencv庫如下:
3、用到的人臉檢測器
4、具體實現程式碼
#include <opencv.hpp> #include <opencv2/core/core.hpp> #include <iostream> using namespace cv; using namespace std; #define MULTI_TARGET //控制切換檢測目標數 int main() { CascadeClassifier faceDetector; string faceCascadeFilename = "haarcascade_frontalface_default.xml"; faceDetector.load(faceCascadeFilename); //載入人臉檢測器 if (faceDetector.empty()) { cout<<"load faceDetector failed!"<<endl; return -1; } Mat srcImg = imread("..\\srcImg.jpg"); if(srcImg.empty()) { cout<<"read image failed!"<<endl; return -1; } imshow("srcImg", srcImg); Mat grayImg; cvtColor(srcImg, grayImg, CV_RGB2GRAY); //轉成灰度圖 vector<Rect> detectionResults; float searchScaleFactor = 1.1f; int minNeighbors = 3; Size minFeatureSize(25, 25); #ifdef MULTI_TARGET int flags = CASCADE_SCALE_IMAGE; //檢測多個目標 #else int flags = CASCADE_FIND_BIGGEST_OBJECT|CASCADE_DO_ROUGH_SEARCH; //只檢測最大目標 #endif faceDetector.detectMultiScale(grayImg, detectionResults, searchScaleFactor, minNeighbors, flags, minFeatureSize); //進行人臉檢測 Mat dstImg = srcImg.clone(); Mat detectionRect; for (int i = 0; i < detectionResults.size(); i++) { if (detectionResults[i].height > 0 && detectionResults[i].width > 0) { detectionRect = grayImg(detectionResults[i]); rectangle(dstImg, detectionResults[i], CV_RGB(0, 255, 0), 2, 8, 0); //畫檢測框 } } imshow("dstImg", dstImg); waitKey(0); return 0; }