如何使用OpenCV Python检测人脸并绘制边界框
我们使用haar级联分类器在图像中检测人脸。haar级联分类器是一种有效的基于机器学习的目标检测方法。我们可以为训练数据训练自己的haar级联,但在这里,我们使用已经训练好的haar级联来进行人脸检测。
我们将使用 haarcascade_frontalface_alt.xml 作为用于人脸检测的”haar级联”XML文件。
如何下载Haarcascades
您可以在GitHub网址上找到不同的haar级联-https://github.com/opencv/opencv/tree/master/data/haarcascades
要下载人脸检测的haar级联,请单击 haarcascade_frontalface_alt.xml 文件。打开它的原始格式,右键点击保存。
注意 -将所有haar级联XML文件保存在 haarcascades 文件夹中。
步骤
我们可以按照以下步骤在图像中检测人脸并绘制边界框-
- 导入所需库。在以下所有示例中,所需的Python库是 OpenCV 。请确保您已安装它。
-
使用 cv2.imread() 读取输入图像。指定完整的图像路径。
-
初始化一个Haar级联分类器对象 face_cascade = cv2.CascadeClassifier() 用于人脸检测。传递haar级联xml文件的完整路径。您可以使用haar级联文件 haarcascade_frontalface_alt.xml 检测图像中的人脸。
-
使用 face_cascade.detectMultiScale() 检测输入图像中的人脸。它以 (x,y,w,h) 格式返回检测到的人脸的坐标。
-
使用 cv2.rectangle() 在原始图像中绘制检测到的人脸的边界矩形。
-
显示带有绘制的人脸边界矩形的图像。
让我们看一些示例,以便更加清楚地理解。
示例
在这个Python程序中,我们检测一个人脸并在检测到的人脸周围绘制一个边界框。
# import required library
import cv2
# read the input image
img = cv2.imread('people.jpg')
# convert to grayscale of each frames
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# read haacascade to detect faces in input image
face_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalface_alt.xml')
# detects faces in the input image
faces = face_cascade.detectMultiScale(gray, 1.1, 2)
print('Number of detected faces:', len(faces))\
# loop over all the detected faces
for (x,y,w,h) in faces:
# To draw a rectangle around the detected face
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)
# Display an image in a window
cv2.imshow('Face Detection',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
将下面的图像视为此程序的 输入文件 −
输出
运行上述Python程序时,将产生以下 输出 窗口−
Number of detected faces: 1
以下是我们得到的输出窗口: output
面部周围的边界框被用黄色绘制。
示例
在这个Python程序中,我们会检测图像中的面部,并在检测到的面部周围绘制边界框。
import cv2
img = cv2.imread('window1.jpg')
img1 =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(img1,170,255,0)
# draw different shapes of ellipses
img = cv2.ellipse(img,(368,250),(100,40),30,0,180,(0,255,255),-1)
img = cv2.ellipse(img,(150,170),(86,45),-30,0,360,(0,255,0),-1)
img = cv2.ellipse(img,(578,250),(60,130),0,0,340,(0,0,255),-1)
# display the image with drawn ellipses
cv2.imshow("Ellipses", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我们将使用这个图像作为这个程序的 输入文件 –
输出
当你运行上述Python程序时,它将产生以下 输出 窗口 –
Number of detected faces: 15
以下是我们得到的输出窗口−
脸部周围的边界框用黄色绘制。