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

# 读取输入图片
img = cv2.imread('people.jpg')

# 将每一帧转换为灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 读取haacascade以检测输入图像中的脸部
face_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalface_alt.xml')

# 检测输入图像中的脸部 
faces = face_cascade.detectMultiScale(gray, 1.1, 2)
print('检测到的脸部数量:', len(faces))\

# 遍历所有检测到的脸部
for (x,y,w,h) in faces:

   # 在检测到的脸部周围画一个矩形
   cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)

# 在窗口中显示一个图像
cv2.imshow('人脸检测',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

将以下图片视为 输入文件 该程序的图像−

如何使用OpenCV Python检测人脸并在其周围绘制边界框?

输出

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

检测到的脸部数量: 1

我们得到以下 输出 窗口−

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

# 画各种形状的椭圆
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)

# 显示带有绘制椭圆的图像
cv2.imshow("Ellipses", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我们将使用该图像作为 输入文件 运行该程序−

如何使用OpenCV Python检测人脸并在其周围绘制边界框?

输出

编写上述Python程序并运行后,将生成以下 输出 窗口−

Number of detected faces: 15

我们得到以下输出窗口−

如何使用OpenCV Python检测人脸并在其周围绘制边界框?

黄色 是面部周围的边界框。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV