OpenCV是構(gòu)建計(jì)算機(jī)視覺應(yīng)用程序的強(qiáng)大工具。計(jì)算機(jī)視覺中最常見的任務(wù)之一是人臉檢測(cè),它涉及識(shí)別圖像或視頻中人臉的存在、位置和面部特征。
在本文中,我們將學(xué)習(xí)如何使用 Haar 級(jí)聯(lián)分類器檢測(cè)圖像中的人臉。
先決條件
在開始之前,你需要在計(jì)算機(jī)上安裝 OpenCV。
參考:https://opencv.org/releases/
你還需要一個(gè)示例圖像來(lái)測(cè)試人臉檢測(cè)算法。你可以使用任何你喜歡的圖像。
第 1 步:加載 Haar 級(jí)聯(lián)分類器
使用 OpenCV 進(jìn)行面部和眼睛檢測(cè)的第一步是加載 Haar 級(jí)聯(lián)分類器。分類器是一個(gè)預(yù)訓(xùn)練的機(jī)器學(xué)習(xí)模型,經(jīng)過(guò)訓(xùn)練可以檢測(cè)人臉和眼睛。
這是加載分類器的代碼:
import?cv2
face_cascade?=?cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade?=?cv2.CascadeClassifier('haarcascade_eye.xml')
第 2 步:加載圖像
接下來(lái),我們需要加載我們要處理的圖像。我們可以使用cv2
模塊中的imread
函數(shù)來(lái)加載圖像。
image?=?cv2.imread('Image.png')
第 3 步:將圖像轉(zhuǎn)換為灰度
Haar 級(jí)聯(lián)分類器在灰度圖像上效果最好,因此我們需要將圖像轉(zhuǎn)換為灰度圖像。我們可以使用cvtColor
函數(shù)來(lái)做到這一點(diǎn)。
gray?=?cv2.cvtColor(image,?cv2.COLOR_BGR2GRAY)
第 4 步:檢測(cè)人臉
現(xiàn)在我們可以使用級(jí)聯(lián)分類器的detectMultiScale
函數(shù)來(lái)檢測(cè)圖像中的人臉。此函數(shù)返回代表檢測(cè)到的人臉位置的矩形列表。
#detect?faces
faces?=?face_cascade.detectMultiScale(gray,?1.1,?4)
#?Get?the?face?ROI
face_roi?=?gray[y:y+h,?x:x+w]
#detect?eyes??
eyes?=?eye_cascade.detectMultiScale(face_roi)
第 5 步:在臉部和眼睛周圍畫矩形
最后,我們可以使用rectangle
函數(shù)在人臉周圍繪制矩形。
#Rectangle?around?face
for?(x,?y,?w,?h)?in?faces:
????cv2.rectangle(image,?(x,?y),?(x+w,?y+h),?(255,?0,?0),?2)
#Rectangle?around?eyes
for?(ex,?ey,?ew,?eh)?in?eyes:
?????cv2.rectangle(frame,?(x+ex,?y+ey),?(x+ex+ew,?y+ey+eh),?(0,?255,?0),?2)
第 6 步:顯示圖像
我們可以使用imshow
函數(shù)來(lái)顯示帶有檢測(cè)到的人臉的圖像。
cv2.imshow('Face?Detection',?image)
cv2.waitKey()
cv2.destroyAllWindows()
完整代碼——檢測(cè)實(shí)時(shí)視頻源中的面部和眼睛
import?cv2
#?Load?the?cascade?classifiers?for?face?and?eye?detection
face_cascade?=?cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade?=?cv2.CascadeClassifier('haarcascade_eye.xml')
#?Start?the?video?capture
capture?=?cv2.VideoCapture(0)
while?True:
????#?Read?the?frame?from?the?video?capture
????_,?frame?=?capture.read()
????#?Convert?the?frame?to?grayscale
????gray?=?cv2.cvtColor(frame,?cv2.COLOR_BGR2GRAY)
????#?Detect?faces?in?the?frame
????faces?=?face_cascade.detectMultiScale(gray,?1.1,?4)
????#?Loop?over?the?faces
????for?(x,?y,?w,?h)?in?faces:
????????#?Draw?a?rectangle?around?the?face
????????cv2.rectangle(frame,?(x,?y),?(x+w,?y+h),?(255,?0,?0),?2)
????????#?Get?the?face?ROI
????????face_roi?=?gray[y:y+h,?x:x+w]
????????#?Detect?eyes?in?the?face?ROI
????????eyes?=?eye_cascade.detectMultiScale(face_roi)
????????#?Loop?over?the?eyes
????????for?(ex,?ey,?ew,?eh)?in?eyes:
????????????#?Draw?a?rectangle?around?the?eyes
????????????cv2.rectangle(frame,?(x+ex,?y+ey),?(x+ex+ew,?y+ey+eh),?(0,?255,?0),?2)
????#?Display?the?frame
????cv2.imshow('Face?Recognition',?frame)
????#?Check?if?the?user?pressed?'q'?to?quit
????if?cv2.waitKey(1)?&?0xFF?==?ord('q'):
????????break
#?Release?the?video?capture?and?destroy?the?windows
capture.release()
cv2.destroyAllWindows()
☆ END ☆
如果看到這里,說(shuō)明你喜歡這篇文章,請(qǐng)轉(zhuǎn)發(fā)、點(diǎn)贊。微信搜索「uncle_pn」,歡迎添加小編微信「 woshicver」,每日朋友圈更新一篇高質(zhì)量博文。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-488424.html
↓掃描二維碼添加小編↓文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-488424.html
到了這里,關(guān)于使用 OpenCV 進(jìn)行面部和眼睛檢測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!