標籤:變數 des scale sea 映像 ges min 參數 ace
對特定映像進行識別,最關鍵的是要有識別對象的特徵檔案。OpenCV已經內建了Face Service特徵檔案,我們只要使用OpenCV的CascadeClassifier類即可進行識別。
文法:
https://github.com/opencv/opencv.git 在這裡可以下載特徵檔案,在data目錄下
識別物件變數 = cv2.CascadeClassifier(特徵檔案)、、
識別對象
識別結果變數 = 識別物件變數.detectMultiScale(圖片,參數1,參數2,。。。)
參數有:
1、scaleFactor: 其原理是系統會以不同的區塊大小對圖片進行掃描,在進行特徵對比。此參數使用者佈建區塊的改變倍數,如無特別需求,一般設定為1.1
2、minNeighbors 此為控制誤檢率參數,預設值為3
3、minSize 設定最小的識別區塊
4、maxSize 設定最大的識別區塊
5、flags 此參數設定檢測模式,可取值如下:
cv2.CV_HAAR_SCALE_IMAGE 按比例檢測
cv2.CV_HAAR_DO_CANNY_PRUNING 利用Canny 邊緣檢測器排除一些邊緣很少或很多的映像地區
cv2.CV_HAAR_FIND_BIGGEST_OBJECT 只檢測最大物體
cv2.CV_HAAR_DO_ROUGH_SEARCH 只做初步檢測
face = faceCascade.detectMultiScale(image,scakeFactor=1.1,minSize=(10,10),minNeighbors=5,flags = cv2.CASCADE_SCALE_IMAGE)
detectMultiScale 方法可以識別多個面部,傳回值是一個列表
for (x,y,w,h) in face:
x,y 表示面部地區的左上方x,y座標;w,h表示面部地區的寬度和高度
import cv2#基本繪圖# import numpy#cv2.namedWindow("Image") #建立視窗#img = cv2.imread(‘20180703200225.jpg‘) #讀取映像#Face Service#img.shape[0] 擷取圖片的高度 img.shape[1] 擷取圖片的寬度faceCascade = cv2.CascadeClassifier(r‘./haarcascade_frontalface_default.xml‘)faces = faceCascade.detectMultiScale(img,scaleFactor = 1.1,minNeighbors = 5,minSize = (10,10),flags = cv2.CASCADE_SCALE_IMAGE)cv2.putText(img,"Find"+str(len(faces))+"faces",(10,img.shape[0]-5),cv2.FONT_HERSHEY_SIMPLEX,1,(255,232,133),2)for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(128,255,0),2) print(x,y,w,h)#cv2.imshow(‘Image‘,img)cv2.imwrite(‘test.jpg‘,img)cv2.waitKey(0)cv2.destroyAllWindow()
python之OpenCv(四)---Face Service