如何在 OpenCV 中使用 Python 检测图像中的猫脸?


Haar 级联分类器是一种有效的物体检测方法。它是一种基于机器学习的方法。为了训练用于猫脸检测的 Haar 级联分类器,算法最初需要大量的正样本图像(包含猫脸的图像)和负样本图像(不包含猫脸的图像)。分类器根据这些正样本和负样本图像进行训练。然后用于检测其他图像中的猫脸。

我们可以使用已经训练好的 Haar 级联进行微笑检测。对于输入图像中的微笑检测,我们需要两个 Haar 级联,一个用于人脸检测,另一个用于微笑检测。我们将使用 **haarcascade_frontalcatface.xml** 来检测图像中的猫脸。

如何下载 Haar 级联?

您可以在以下 GitHub 网站地址找到不同的 Haar 级联:

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

要下载用于猫脸检测的 Haar 级联,请点击 **haarcascade_frontalcatface.xml** 文件。以原始格式打开它,右键单击并保存。

步骤

要检测图像中的猫脸并在其周围绘制边界框,您可以按照以下步骤操作:

  • 导入所需的库。在以下所有示例中,所需的 Python 库是 **OpenCV**。确保您已安装它。

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

  • 初始化一个用于猫脸检测的 Haar 级联分类器对象 **cat_cascade = cv2.CascadeClassifier()**。传递 Haar 级联 xml 文件的完整路径。您可以使用 Haar 级联文件 **haarcascade_frontalcatface.xml** 来检测图像中的猫脸。

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

  • 使用 **cv2.rectangle()** 在原始图像中检测到的猫脸周围绘制边界矩形。

  • 显示带有猫脸周围绘制的边界矩形的图像。

让我们看一些在图像中检测猫脸的示例。

示例

在本示例中,我们使用 Haar 级联检测输入图像中的猫脸。

# import required libraries import cv2 # read the input image img = cv2.imread('cat.jpg') # convert the input image to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # read the haarcascade to detect cat faces cat_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalcatface.xml') # Detects cat faces in the input image faces = cat_cascade.detectMultiScale(gray, 1.1, 3) print('Number of detected cat faces:', len(faces)) # if atleast one cat face id detected if len(faces) > 0: print("Cat face detected") for (x,y,w,h) in faces: # To draw a rectangle in a face cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2) cv2.putText(img, 'cat face', (x, y-3), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1) else: print("No cat face detected") # Display an image in a window cv2.imshow('Cat Image',img) cv2.waitKey(0) cv2.destroyAllWindows()

我们将此图像用作此程序的 **输入文件**:


输出

执行程序时,将生成以下输出:

Number of detected cat faces: 1
Cat face detected

并且我们将获得以下 **输出** 窗口:


示例

在本示例中,我们使用 Haar 级联检测输入图像中的猫脸。

# import required libraries import cv2 # read the input image img = cv2.imread('two-cats.jpg') # convert the input image to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # read the haarcascade to detect cat faces cat_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalcatface.xml') # Detects cat faces in the input image faces = cat_cascade.detectMultiScale(gray, 1.1, 3) print('Number of detected cat faces:', len(faces)) # if atleast one cat face id detected if len(faces) > 0: for (x,y,w,h) in faces: print("Cat face detected") # To draw a rectangle in a face cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2) cv2.putText(img, 'cat face', (x, y-3), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1) else: print("No cat face detected") # Display an image in a window cv2.imshow('Cat Image',img) cv2.waitKey(0) cv2.destroyAllWindows()

我们将此图像用作此程序的 **输入文件**:


执行后,将生成以下 **输出**:

Number of detected cat faces: 2
Cat face detected
Cat face detected

并且我们将获得以下 **输出** 窗口:


更新于: 2022年12月5日

2K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告