【OpenCV入门指南】第十三篇 人脸检测
原文出處:http://blog.csdn.net/MoreWindows/article/details/8426318#t2
??? 本篇介紹圖像處理與模式識別中最熱門的一個領(lǐng)域——人臉檢測(人臉識別)。人臉檢測可以說是學(xué)術(shù)界的寵兒,在不少EI,SCI高級別論文都能看到它的身影。甚至很多高校學(xué)生的畢業(yè)設(shè)計都會涉及到人臉檢測。當(dāng)然人臉檢測的巨大實用價值也讓很多公司紛紛關(guān)注,很多公司都擁有這方面的專利或是開發(fā)商業(yè)產(chǎn)品出售。
????在OpenCV中,人臉檢測也是其熱門應(yīng)用之一。在OpenCV的特征檢測專題就詳細介紹了人臉檢測的原理——通過Haar特征來識別是否為人臉。Haar特征檢測原理與Haar特征分類器的訓(xùn)練放到下一篇《【OpenCV入門指南】第十四篇? Haartraining》來講,本篇主要介紹如何在OpenCV中使用Haar特征分類器來對圖像中的人臉進行檢測和識別。下面將分成五步來詳細示范如何在OpenCV中進行人臉識別:
??? 一.人臉的Haar特征分類器是什么
??? 二.在哪找人臉的Haar特征分類器
??? 三.怎么用人臉的Haar特征分類器
??? 四.人臉識別示例代碼
??? 五.人臉識別程序運行結(jié)果
?
一.人臉的Haar特征分類器是什么
人臉的Haar特征分類器就是一個XML文件,該文件中會描述人臉的Haar特征值。當(dāng)然Haar特征的用途可不止可以用來描述人臉這一種,用來描述眼睛,嘴唇或是其它物體也是可以的。
?
二.在哪找人臉的Haar特征分類器
OpenCV有已經(jīng)自帶了人臉的Haar特征分類器。OpenCV安裝目錄中的\data\ haarcascades目錄下的haarcascade_frontalface_alt.xml與haarcascade_frontalface_alt2.xml都是用來檢測人臉的Haar分類器。這個haarcascades目錄下還有人的全身,眼睛,嘴唇的Haar分類器。讀者可以仿照本方的例子來試驗下效果看看。
?
三.怎么用人臉的Haar特征分類器
使用人臉的Haar特征分類器非常之簡單,直接使用cvHaarDetectObjects。下面來看看這個函數(shù)的介紹:
函數(shù)功能:檢測圖像中的目錄
函數(shù)原型:
CVAPI(CvSeq*)?cvHaarDetectObjects(
? const?CvArr*?image,
? CvHaarClassifierCascade*?cascade,
? CvMemStorage*?storage,
? double?scale_factor?CV_DEFAULT(1.1),
? int?min_neighbors?CV_DEFAULT(3),
? int?flags?CV_DEFAULT(0),
? CvSize?min_size?CV_DEFAULT(cvSize(0,0)),
? CvSize?max_size?CV_DEFAULT(cvSize(0,0))
);
函數(shù)說明:
第一個參數(shù)表示輸入圖像,盡量使用灰度圖以加快檢測速度。
第二個參數(shù)表示Haar特征分類器,可以用cvLoad()函數(shù)來從磁盤中加載xml文件作為Haar特征分類器。
第三個參數(shù)為CvMemStorage類型,大家應(yīng)該很熟悉這個CvMemStorage類型了,《OpenCV入門指南》中很多文章都介紹過了。
第四個參數(shù)表示在前后兩次相繼的掃描中,搜索窗口的比例系數(shù)。默認為1.1即每次搜索窗口依次擴大10%
第五個參數(shù)表示構(gòu)成檢測目標(biāo)的相鄰矩形的最小個數(shù)(默認為3個)。如果組成檢測目標(biāo)的小矩形的個數(shù)和小于?min_neighbors - 1?都會被排除。如果min_neighbors?為?0,?則函數(shù)不做任何操作就返回所有的被檢候選矩形框,這種設(shè)定值一般用在用戶自定義對檢測結(jié)果的組合程序上。
第六個參數(shù)要么使用默認值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果設(shè)置為CV_HAAR_DO_CANNY_PRUNING,那么函數(shù)將會使用Canny邊緣檢測來排除邊緣過多或過少的區(qū)域,因此這些區(qū)域通常不會是人臉?biāo)趨^(qū)域。
第七個,第八個參數(shù)表示檢測窗口的最小值和最大值,一般設(shè)置為默認即可。
函數(shù)返回值:
函數(shù)將返回CvSeq對象,該對象包含一系列CvRect表示檢測到的人臉矩形。
?
四.人臉識別示例代碼
下面給出一個完整的示例代碼,代碼中的GetTickCount可以參閱《Windows?各種計時函數(shù)總結(jié)》,cvEqualizeHist可以參閱《【OpenCV入門指南】第八篇灰度直方圖》。
[cpp]?view plaincopy五.人臉識別程序運行結(jié)果
運行結(jié)果一(單人正面):
這張圖的干擾太少,換張干擾大點的圖來試試。
?
運行結(jié)果二(單人側(cè)面):
呵呵,左邊那個人眼睛被擋住了,因此普通的人臉檢測肯定難以識別的。
?
運行結(jié)果三(多人):
效果還不錯。當(dāng)然商業(yè)級產(chǎn)品的準確度,性能,效率肯定會比OpenCV自帶的分類器高的多。
?
下一篇《【OpenCV入門指南】第十四篇? Haartraining》將介紹如何訓(xùn)練Haar特征分類器并簡要介紹Haar特征檢測的原理。歡迎繼續(xù)瀏覽。
總結(jié)
以上是生活随笔為你收集整理的【OpenCV入门指南】第十三篇 人脸检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像形态学操作—腐蚀膨胀深入
- 下一篇: 在32位Windows上扩展虚拟内存(L