如何在OpenCV Python中裁剪和保存检测到的人脸

如何在OpenCV Python中裁剪和保存检测到的人脸

我们可以使用预先训练好的haar级联分类器来检测图像中的人脸。为了检测人脸, OpenCV 为我们提供了不同的haar级联作为xml文件。我们将使用 haarcascade_frontalface_alt.xml 来检测图像中的人脸。检测到的人脸坐标为 (x, y, w, h) 。要裁剪并保存检测到的人脸,我们保存图像为 image[y:y+h, x:x+w]

如何下载Haarcascades

您可以在GitHub网址中找到不同的Haarcascades –

https://github.com/opencv/opencv/tree/master/data/haarcascades

要下载用于人脸检测的haar级联,请点击 haarcascade_frontalface_alt.xml 文件。以原始格式打开它,右键点击保存文件。

注意 - 将所有haar级联xml文件保存在 haarcascade 文件夹中。

步骤

要在图像中裁剪和保存检测到的人脸,可以按照以下步骤进行:

  • 导入所需的库。在以下所有示例中,需要Python库为 OpenCV 。请确保您已经安装了它。

  • 使用 cv2.imread() 读取输入图像。指定完整的图像路径。将输入图像转换为灰度。

  • 为人脸检测初始化一个Haar级联分类器对象 face_cascade = cv2.CascadeClassifier() 。传递haar级联xml文件的完整路径。可以使用haar级联文件 haarcascade_frontalface_alt.xml 来检测图像中的人脸。

  • 使用 face_cascade.detectMultiScale() 检测输入图像中的人脸。它以 (x, y, w, h) 格式返回检测到的人脸的坐标。

  • 遍历所有检测到的人脸。将 image[y:y+h, x:x+w] 作为裁剪的人脸,并将其赋值给一个新变量,比如 face 。使用 cv2.imwrite() 保存裁剪的人脸。

  • 可选地,显示裁剪过的人脸以进行可视化。

让我们看一些示例以更清楚地理解。

示例

在这个示例中,我们使用haar级联裁剪并保存在输入图像中检测到的人脸。

# import required libraries
import cv2

# read the input image
img = cv2.imread('woman.jpg')

# convert to grayscale of each frames
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# read the haarcascade to detect the faces in an image
face_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalface_default.xml')

# detects faces in the input image
faces = face_cascade.detectMultiScale(gray, 1.3, 4)
print('Number of detected faces:', len(faces))

# loop over all detected faces
if len(faces) > 0:
   for i, (x, y, w, h) in enumerate(faces):

      # To draw a rectangle in a face
      cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 2)
      face = img[y:y + h, x:x + w]
      cv2.imshow("Cropped Face", face)
      cv2.imwrite(f'face{i}.jpg', face)
      print(f"face{i}.jpg is saved")

# display the image with detected faces
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

如何在OpenCV Python中裁剪和保存检测到的人脸

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

Number of detected faces: 1
face0.jpg is saved

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

如何在OpenCV Python中裁剪和保存检测到的人脸

示例

在这个Python示例中,我们使用haar级联来裁剪并保存输入图像中检测到的人脸。

# import required libraries
import cv2

# read the input image
img = cv2.imread('two-men.jpg')

# convert to grayscale of each frames
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# read the haarcascade to detect the faces in an image
face_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalface_alt.xml')

# detects faces in the input image
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
print('Number of detected faces:', len(faces))

# loop over all detected faces
if len(faces) > 0:
   for i, (x,y,w,h) in enumerate(faces):

      # To draw a rectangle in a face
      cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)
      face = img[y:y+h, x:x+w]
      cv2.imshow(f"Cropped Face {i}", face)
      cv2.imwrite(f'face{i}.jpg', face)
      print(f"face{i}.jpg is saved")

# display the image with detected faces
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我们将把这个图像用作该程序的 输入文件 -

如何在OpenCV Python中裁剪和保存检测到的人脸

当您执行该程序时,它将产生以下 输出 -

Number of detected faces: 2
face0.jpg is saved
face1.jpg is saved

这里是我们得到的 输出 窗口 −

如何在OpenCV Python中裁剪和保存检测到的人脸

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程