1. 程式人生 > >OpenCV檢測篇(一)——貓臉檢測

OpenCV檢測篇(一)——貓臉檢測

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檔案替換既可