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