日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

OpenCV学习记录(一):使用haar分类器进行人脸识别

發(fā)布時間:2025/3/21 pytorch 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV学习记录(一):使用haar分类器进行人脸识别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OpenCV支持的目標檢測的方法是利用樣本的Haar特征進行的分類器訓練,得到的級聯(lián)boosted分類器(Cascade Classification)。OpenCV2之后的C++接口除了Haar特征以外也可以使用LBP特征。
介紹haar分類器理論知識:
1、http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html(講的很詳細);
2、http://blog.csdn.net/zy1034092330/article/details/48850437(基礎理論)
實際使用中原理只要大概懂就行了,如果想深究,可以讀讀兩個鏈接中的博文。
使用OpenCV中自帶的haar分類器識別人臉,其文件在OpenCV安裝文件夾如下路徑中:

haarcascade_frontalface_alt.xml文件復制到工程根目錄下即可。

代碼:

#include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;//String my_face_cascade_name = "my_haarcasade_face.xml"; String face_cascade_name = "haarcascade_frontalface_alt.xml"; CascadeClassifier face_cascade; String window_name = "Capture - face detection";void detectFace(Mat frame);int main() {VideoCapture capture;Mat frame;//檢測是否成功讀取人臉的haar分類器,就是那個xml文件if (!face_cascade.load(my_face_cascade_name)){cout << "Error: cannot load face casade!!!" << endl;return -1;}capture.open(0);//打開攝像頭//檢測攝像頭是否成功打開if (!capture.isOpened()){cout << "Error: cannot open the camera!!!" << endl;return -1;}namedWindow(window_name);//創(chuàng)建窗口while (true){capture >> frame; //從攝像頭讀入一幀圖像detectFace(frame);//對那幀圖像進行處理,識別人臉//等待按鍵,若按下esc鍵,則退出循環(huán)int c = waitKey(10);if (c == 0x1B)break;}return 0; }//從輸入圖像中檢測人臉 void detectFace(Mat frame) {Mat frame_gray;vector<Rect> face;cvtColor(frame, frame_gray, COLOR_BGR2GRAY);//轉(zhuǎn)成灰度圖像equalizeHist(frame_gray, frame_gray);//直方圖均衡化//按照文檔說明調(diào)用函數(shù)即可face_cascade.detectMultiScale(frame_gray, face, 1.1, 2, CASCADE_SCALE_IMAGE, Size(30, 30));//遍歷所有人臉for (size_t i = 0; i < face.size(); i++){//根據(jù)返回的Rect的x坐標、y坐標、寬width和高height算出中心位置Point center(face[i].x + face[i].width/2, face[i].y + face[i].height/2);//調(diào)用ellipse畫出橢圓型邊框,指示人臉ellipse(frame, center, Size(face[i].width/2, face[i].height/2), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);}//最后刷新窗口,顯示圖像imshow(window_name, frame); }

程序中已經(jīng)有相關注釋,不做贅述。只要環(huán)境配置正確,OpenCV2下運行應該不會有錯。
簡要總結(jié)一下CascadeClassifier::detectMultiScale函數(shù)的用法:
從文檔中摘出來的三種c++下的定義方式:

CascadeClassifier::detectMultiScale
Detects objects of different sizes in the input image. The detected objects are returned as a list of rectangles.

C++: void CascadeClassifier::detectMultiScale(InputArray image, vector& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())

C++: void CascadeClassifier::detectMultiScale(InputArray image, vector& objects, vector& numDetections, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())

C++: void CascadeClassifier::detectMultiScale(InputArray image, std::vector& objects, std::vector& rejectLevels, std::vector& levelWeights, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size(), bool outputRejectLevels=false )

只討論下面這種形式:

C++: void CascadeClassifier::detectMultiScale(InputArray image,
vector& objects, double scaleFactor=1.1, int minNeighbors=3, int
flags=0, Size minSize=Size(), Size maxSize=Size())

參數(shù)說明:
1、InputArray image:
輸入圖像,填Mat類型的圖像即可。圖像通道數(shù)可以是任意的,但圖像深度應為CV_8U、CV_16U、CV_16S、CV_32F、CV_64F;

2、std::vector& objects:
為被檢測物體的矩形向量組,這里就代表人臉所在范圍的矩形向量組;

3、double scaleFactor=1.1:
scaleFactor為圖像中的尺度參數(shù),默認取值1.1;

4、int minNeighbors=3:
每一個級聯(lián)矩形應該保留的鄰近個數(shù)的最小值,默認為3;

5、int flags=0:
在老版本的OpenCV中,與cvHaarDetectObjects中的這個參數(shù)具有相同的含義,新版本中沒用,默認取0;

6、Size minSize=Size():
物體的最小大小,指定其大小的最小值,所有小于此的都被忽視掉;

7、Size maxSize=Size():
物體的最大大小,指定其大小的最大值,所有大于此的都被忽視掉;

總結(jié)

以上是生活随笔為你收集整理的OpenCV学习记录(一):使用haar分类器进行人脸识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。