第一個做電子商務的網站可以免費打廣告的網站
使用級聯函數
基本流程
函數介紹
在OpenCV中,人臉檢測使用的是cv2.CascadeClassifier.detectMultiScale()函數,它可以檢測出圖片中所有的人臉。該函數由分類器對象調用,其語法格式為:
objects = cv2.CascadeClassifier.detectMultiScale( image[, scaleFactor[,
?minNeighbors[, flags[, minSize[, maxSize]]]]] )
式中各個參數及返回值的含義為:
- image:待檢測圖像,通常為灰度圖像。
- scaleFactor:表示在前后兩次相繼的掃描中,搜索窗口的縮放比例。
- minNeighbors:表示構成檢測目標的相鄰矩形的最小個數。默認情況下,該值為3,意味著有3個以上的檢測標記存在時,才認為人臉存在。如果希望提高檢測的準確率,可以將該值設置得更大,但同時可能會讓一些人臉無法被檢測到。
- flags:該參數通常被省略。在使用低版本OpenCV(OpenCV 1.X版本)時,它可能會被設置為CV_HAAR_DO_CANNY_PRUNING,表示使用Canny邊緣檢測器來拒絕一些區(qū)域。
- minSize:目標的最小尺寸,小于這個尺寸的目標將被忽略。
- maxSize:目標的最大尺寸,大于這個尺寸的目標將被忽略。如果maxSize和minSize大小一致,表示僅在一個尺度上查找目標。通常情況下,將該可選參數省略即可。
objects:返回值,目標對象的矩形框向量組。該值是一組矩形信息,包含了每個檢測到的人臉所對應矩形框的(x方向位置、y方向位置、寬度、高度)信息。
代碼示例
# -*- coding: utf-8 -*-
"""
Created on Sat Feb 17 21:09:07 2024@author: 李立宗公眾號:計算機視覺之光知識星球:計算機視覺之光"""import cv2
# ===============1 原始圖像處理====================
image = cv2.imread('manyPeople.jpg')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# ================2 加載分類器========================
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# =================3 人臉檢測========================
faces = faceCascade.detectMultiScale(gray,scaleFactor = 1.04,minNeighbors = 18,minSize = (8,8))
# ===============4 打印輸出的實現=====================
print("發(fā)現{0}張人臉!".format(len(faces)))
print("其位置分別是:")
print(faces)
# ==================5 標注人臉及顯示=======================
for(x,y,w,h) in faces:cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow("result",image)
cv2.waitKey(0)
cv2.destroyAllWindows()
檢測結果:
學習參考
?
理解并實現OpenCV中的圖像平滑技術
OpenCV中的邊緣檢測技術及實現
參考文獻
1、OpenCV輕松入門
李立宗,OpenCV輕松入門,電子工業(yè)出版社,2023
2、計算機視覺40例
李立宗,計算機視覺40例,電子工業(yè)出版社,2022