建設(shè)銀行面試通知網(wǎng)站2024最火的十大新聞?dòng)心男?/h1>
文章目錄
- 一、人臉檢測流程介紹
- 二、用于人臉檢測的關(guān)鍵方法
- 1.加載分類器(cv2.CascadeClassifier())
- 2.檢測圖像中的人臉(cv2.CascadeClassifier.detectMultiscale())
- 三、代碼實(shí)現(xiàn)
一、人臉檢測流程介紹
- 下面是一張含有多個(gè)人臉的圖片
- 第一步:讀取圖片后將圖片轉(zhuǎn)換成灰度圖
- 第二步:在灰度圖中進(jìn)行特征檢測,并檢測出各個(gè)人臉的特征信息
- 第三步:將各個(gè)人臉的特征信息保存下來
- 第四部:根據(jù)檢測出的人臉的特征信息,在原圖中用矩形框,框出每個(gè)人的臉部區(qū)域
- 最終的結(jié)果如下:
二、用于人臉檢測的關(guān)鍵方法
1.加載分類器(cv2.CascadeClassifier())
- 在OpenCV庫中,提供了多個(gè)用于檢測人臉的Haar特征的級聯(lián)分類器,并以xml文件的形式存儲,這些文件是預(yù)訓(xùn)練的,意味著它已經(jīng)被訓(xùn)練好了,可以直接用于檢測圖像中的人臉
- 下面鏈接中是對人臉檢測的Haar特征和級聯(lián)分類器的介紹:
- https://blog.csdn.net/weixin_73504499/article/details/142883884?spm=1001.2014.3001.5501
- 如何找到這些xml文件呢?
- 這些 xml文件存在我們pycharm的環(huán)境中,通過下圖中的步驟找到:
- 這些 xml文件存在我們pycharm的環(huán)境中,通過下圖中的步驟找到:
- 找到這些文件后通過 cv2.CascadeClassifier() 加載分類器
- cv2.CascadeClassifier 是 OpenCV 庫中用于加載和訓(xùn)練級聯(lián)分類器的一個(gè)類
2.檢測圖像中的人臉(cv2.CascadeClassifier.detectMultiscale())
-
在OpenCV中,cv2.CascadeClassifier 類有一個(gè)非常重要的方法叫做 detectMultiScale(),這個(gè)方法專門用于在圖像中檢測對象。detectMultiScale() 方法會(huì)搜索圖像中所有可能匹配預(yù)訓(xùn)練分類器(如Haar或LBP特征分類器)的對象,并返回這些對象的位置(通常以矩形框的形式)。
-
下面是 detectMultiScale() 方法的一些關(guān)鍵參數(shù)和它們的含義:
- image:要搜索的輸入圖像,通常是一個(gè)灰度圖像(因?yàn)轭伾畔τ贖aar特征來說不是必需的,而且灰度圖像處理起來更快)。
- scaleFactor:圖像縮放的比例因子。在檢測過程中,圖像會(huì)按照這個(gè)比例因子逐步縮小,以便在不同的尺度上搜索對象。例如,scaleFactor=1.05 意味著每次迭代圖像都會(huì)縮小5%。
- minNeighbors:每個(gè)候選矩形框需要有多少個(gè)相鄰的矩形框來保留該框。這個(gè)參數(shù)有助于消除錯(cuò)誤的檢測。例如,如果設(shè)置為3,那么只有當(dāng)至少有3個(gè)矩形框重疊時(shí),該框才會(huì)被保留。
- flags:一些可選的標(biāo)志,用于修改檢測過程的行為。例如,cv2.CASCADE_SCALE_IMAGE 會(huì)告訴分類器在檢測之前自動(dòng)縮放圖像(但通常這個(gè)標(biāo)志是默認(rèn)啟用的,所以不需要顯式設(shè)置)。
- minSize 和 maxSize:對象的最小和最大可能尺寸(以像素為單位)。這些參數(shù)可以幫助減少不必要的搜索區(qū)域,并加快檢測速度。
- 返回值:detectMultiScale() 方法返回一個(gè)矩形框的列表(每個(gè)框都是一個(gè) (x, y, w, h) 元組,其中 (x, y) 是矩形左上角的坐標(biāo),w 和 h 分別是矩形的寬度和高度)
三、代碼實(shí)現(xiàn)
- 完整代碼如下:
import cv2""" 加載圖片,并將圖片轉(zhuǎn)換為灰度圖 """ image = cv2.imread('face.png') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)""" 加載分類器 """ # 'haarcascade_frontalface_default.xml' 用于檢測正面人臉的Haar特征的級聯(lián)分類器 faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')""" 使用分類器對人臉進(jìn)行檢測 """ faces = faceCascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=9, minSize=(8, 8)) print("發(fā)現(xiàn){}張人臉".format(len(faces))) print("其位置分別是:", faces)""" 遍歷每一個(gè)人臉的特征,并用矩形框?qū)⑷四槻课豢虺?""" for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)""" 顯示結(jié)果 """ cv2.imshow("result", image) cv2.waitKey(0) cv2.destroyAllWindows()
- 結(jié)果如下: