fanfuhan OpenCV 教學092 ~ opencv-092-對象檢測(HAAR特徵介紹) [人臉+嘴唇 定位/偵測/抓取/擷取]

fanfuhan OpenCV 教學092 ~ opencv-092-對象檢測(HAAR特徵介紹) [人臉+嘴唇 定位/偵測/抓取/擷取]

fanfuhan OpenCV 教學092 ~ opencv-092-對象檢測(HAAR特徵介紹) [人臉+嘴唇 定位/偵測/抓取/擷取]

資料來源: https://fanfuhan.github.io/

https://fanfuhan.github.io/2019/05/09/opencv-092/

GITHUB:https://github.com/jash-git/fanfuhan_ML_OpenCV


HAAR小波基函數,因為其滿足對稱性,對人臉這種生物對稱性良好的對象特別適合用來做檢測器,常見的Haar特徵分為三類:

   △邊緣特徵

   △線性特徵

   △中心特徵和對角線特徵

不同特徵可以進行多種組合,生成更加複雜的級聯特徵,特徵模板內有白色和黑色兩種矩形,並定義該模板的特徵值為白色矩形像素和減去黑色矩形像素和,Haar特徵值反映了圖像的對比度與梯度變化。
OpenCV中HAAR特徵計算是積分圖技術,這個我們在前面也分享過啦,所以可以非常快速高效的開窗檢測, HAAR級聯檢測器具備有如下特性:

   △高類間變異性
   △低類內變異性
   △局部強度差
   △不同尺度

   △計算效率高



Python

"""
对象检测(HAAR特征介绍)
"""
import cv2 as cv

capture = cv.VideoCapture(0)
face_detector = cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_frontalface_alt.xml")
smile_detector = cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_smile.xml")

while True:
    ret, image = capture.read()
    if ret is True:
        faces = face_detector.detectMultiScale(image, scaleFactor=1.05, minNeighbors=3,
                                               minSize=(30, 30), maxSize=(300, 300))
        for x, y, width, height in faces:
            cv.rectangle(image, (x, y), (x + width, y + height), (0, 0, 255), 2, cv.LINE_8, 0)
        roi = image[y:y + height, x:x + width]
        smiles = smile_detector.detectMultiScale(roi, scaleFactor=1.7, minNeighbors=3,
                                                 minSize=(15, 15), maxSize=(100, 100))
        for sx, sy, sw, sh in smiles:
            cv.rectangle(roi, (sx, sy), (sx + sw, sy + sh), (0, 255, 0), 1)

        cv.imshow("faces", image)
        c = cv.waitKey(50)
        if c == 27:
            break
    else:
        break

cv.destroyAllWindows()

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *