如何使用OpenCV Python检测人脸并绘制边界框

如何使用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()

将下面的图像视为此程序的 输入文件

如何使用OpenCV Python检测人脸并绘制边界框

输出

运行上述Python程序时,将产生以下 输出 窗口−

Number of detected faces: 1

以下是我们得到的输出窗口: output

如何使用OpenCV Python检测人脸并绘制边界框

面部周围的边界框被用黄色绘制。

示例

在这个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()

我们将使用这个图像作为这个程序的 输入文件

如何使用OpenCV Python检测人脸并绘制边界框

输出

当你运行上述Python程序时,它将产生以下 输出 窗口 –

Number of detected faces: 15

以下是我们得到的输出窗口−

如何使用OpenCV Python检测人脸并绘制边界框

脸部周围的边界框用黄色绘制。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程