1. 程式人生 > >OpenCV學習代碼記錄——人臉檢測

OpenCV學習代碼記錄——人臉檢測

puts tro 按鍵 img IE source cpu cpp gray

很久之前學習過一段時間的OpenCV,當時沒有做什麽筆記,但是代碼都還在,這裏把它貼出來做個記錄。
代碼放在碼雲上,地址在這裏https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/imgproc.hpp>

#include <cstdio>
// g++ face.cpp -o face -std=c++11 -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_objdetect
// 文件在opencv的安裝目錄下有 static const char* cascade_name = "D:\\OpenCV\\share\\OpenCV\\haarcascades\\" "haarcascade_frontalface_alt2.xml"; // http://wiki.opencv.org.cn/index.php/%E4%BA%BA%E8%84%B8%E6%A3%80%E6%B5%8B void frameFaceDetection(cv::Mat& src, cv::CascadeClassifier& cascade, const
char* showWindowName); int FaceDetection(int c,char**v) { //cv::Mat src,gray; // 源圖像,灰度圖像 cv::VideoCapture capture; // 視頻捕獲對象 cv::Mat frame; // 視頻幀 cv::CascadeClassifier cascade; //級聯分類器 /** // 加載源圖像 const char* picpath = "../Image/sisy.jpg"; if
(c > 1) { picpath = v[1]; } src = cv::imread(picpath); if (src.empty()) { puts("圖片加載失敗!!!"); return -1; } */ // 打開視頻文件 if (!capture.open("../Image/video.mov")) { puts("打開視頻文件失敗!!!"); return -1; } // 加載人臉識別級聯分類器文件 if (!cascade.load(cascade_name)){ puts("人臉識別級聯分類器文件加載失敗!!!"); return 0; } // 創建顯示窗口 cv::namedWindow("src"); cv::Mat src_scale; src_scale.create(cv::Size(480, 320), CV_8SC3); // 循環取幀並顯示 while (capture.read(frame)) { // 進行縮放 cv::resize(frame, src_scale, src_scale.size()); // 檢測並顯示 frameFaceDetection(src_scale, cascade, "src"); // 等待按鍵事件 // 此處等待也為顯示圖像函數提供足夠的時間完成顯示 // 等待事件可以按照CPU速度進行調節 if (cv::waitKey(1) >= 0) { break; // 按鍵就退出 } } //cv::waitKey(); cv::destroyAllWindows(); return 0; } void frameFaceDetection(cv::Mat& src, cv::CascadeClassifier& cascade, const char* showWindowName) { std::vector<cv::Rect> faces; cv::Mat gray; // 獲取源圖像的灰度圖像 gray.create(src.size(), CV_8UC1); cv::cvtColor(src, gray, CV_BGR2GRAY); // 使灰度圖象直方圖均衡化 cv::equalizeHist(gray, gray); // 獲取初步檢測結果 cascade.detectMultiScale( gray/*源圖像*/, faces/*檢測出的物體邊緣(得到被檢測物體的矩形框向量組)*/, 1.1/*每一個圖像尺度中的尺度參數,默認值為1.1*/, 2/*每一個級聯矩形應該保留的鄰近個數*/, CV_HAAR_SCALE_IMAGE, cv::Size(30, 30)/*最小可能的對象的大小,小於的對象將被忽略*/); // 將檢測得到的結果,繪制到原圖像上 for (auto face : faces) { // 繪制紅色矩形 cv::rectangle(src, face, cv::Scalar(0, 0, 255), 3); } // 顯示圖像 cv::imshow(showWindowName, src); }

OpenCV學習代碼記錄——人臉檢測