OpenCV檢測篇(一)——貓臉檢測
阿新 • • 發佈:2019-01-06
1、detectMultiScale()
此函式的作用是,在輸入影象中檢測不同尺寸的物件,返回包含物件的矩形框。它接收的引數:
1.image——輸入影象
2.scaleFactor——表示每輪檢測影象齒輪減少的比例
3.minNeighbors——指明物件要至少被檢測到幾次才能判定物件確實存在
4.minSize——檢測物件的最小尺寸
5.maxSize——檢測物件的最大尺寸
2、貓臉檢測
# -*- coding=utf-8 -*-
import cv2
# 載入貓臉檢測器
catPath = "haarcascade_frontalcatface.xml"
faceCascade = cv2.CascadeClassifier(catPath)
# 讀取圖片並灰度化
img = cv2.imread("cat1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 貓臉檢測
faces = faceCascade.detectMultiScale(
gray,
scaleFactor= 1.02,
minNeighbors=3,
minSize=(150, 150),
flags=cv2.CASCADE_SCALE_IMAGE
)
# 框出貓臉並加上文字說明
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0 , 0, 255), 2)
cv2.putText(img,'Cat',(x,y-7), 3, 1.2, (0, 255, 0), 2, cv2.LINE_AA)
# 顯示圖片並儲存
cv2.imshow('Cat?', img)
cv2.imwrite("cat.jpg",img)
c = cv2.waitKey(0)
注:haarcascade_frontalcatface.xml 下載在這裡
3、人臉檢測
# -*- coding: UTF-8 -*-
"""
opencv實現人臉識別
參考:
1、https://github.com/opencv/opencv/tree/master/data/haarcascades
2、http://www.cnblogs.com/hanson1/p/7105265.html
"""
import cv2
# 待檢測的圖片路徑
imagepath="nba.jpg"
image = cv2.imread(imagepath)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
'''
# 獲取人臉識別訓練資料
對於人臉特徵的一些描述,opencv在讀取完資料後很據訓練中的樣品資料,
就可以感知讀取到的圖片上的特徵,進而對圖片進行人臉識別。
xml資料下載,
參考:https://github.com/opencv/opencv/tree/master/data/haarcascades
'''
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')
# 探測人臉
# 根據訓練的資料來對新圖片進行識別的過程。
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.15,
minNeighbors = 5,
minSize = (5,5),
#flags = cv2.HAAR_SCALE_IMAGE
)
# 我們可以隨意的指定裡面引數的值,來達到不同精度下的識別。返回值就是opencv對圖片的探測結果的體現。
# 處理人臉探測的結果
print ("發現{0}個人臉!".format(len(faces)))
for(x,y,w,h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
# cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)
cv2.imshow("image",image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4、舉一反三
本文雖然只是在說貓臉檢測,但是在OpenCV下,人臉檢測、行人檢測、人眼檢測等都是同樣的道理,同樣的流程。只需要把最開始相應的檢測器換掉,然後按照實際情況調節detectMultiScale()的引數即可。
只需要在這裡下載相應的.xml檔案替換既可