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()