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

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

哈尔级联分类器是一种有效的对象检测方法。这是一种基于机器学习的方法。为了训练用于猫脸检测的哈尔级联分类器,算法最初需要很多正面图像(具有猫脸的图像)和负面图像(不含猫脸的图像)。从这些正面和负面图像中训练分类器。然后用它来在其他图像中检测猫脸。

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

如何下载Haarcascades?

您可以通过以下GitHub网址找到不同的Haarcascades-

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 cv2

# 读取输入图像
img = cv2.imread('cat.jpg')

# 将输入图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 读取用于检测猫脸的haar级联分类器
cat_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalcatface.xml')

# 在输入图像中检测猫脸
faces = cat_cascade.detectMultiScale(gray, 1.1, 3)
print('检测到的猫脸数量:', len(faces))

# 如果至少检测到一只猫脸
if len(faces) > 0:
   print("检测到猫脸")
   for (x,y,w,h) in faces:

      # 在脸部绘制矩形
      cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)
      cv2.putText(img, '猫脸', (x, y-3),
      cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)
else:
   print("未检测到猫脸")

# 在窗口中显示图像
cv2.imshow('猫图像',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我们将使用这张图片作为程序的 输入文件 -

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

输出

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

检测到的猫脸数量: 1
检测到猫脸

并且我们得到以下 输出 窗口 –

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

示例

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

# 导入所需库
import cv2

# 读取输入图像
img = cv2.imread('two-cats.jpg')

# 将输入图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 读取卷积神经网络来检测猫脸
cat_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalcatface.xml')

# 检测输入图像中的猫脸
faces = cat_cascade.detectMultiScale(gray, 1.1, 3)
print('检测到的猫脸数量:', len(faces))

# 如果至少检测到一个猫脸
if len(faces) > 0:
   for (x,y,w,h) in faces:
      print("检测到猫脸")

      # 在脸上画一个矩形
      cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,255),2)
      cv2.putText(img, '猫脸', (x, y-3),
      cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)
else:
   print("未检测到猫脸")

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

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

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

运行后,程序将产生以下 输出 -

检测到的猫脸数量: 2
检测到猫脸
检测到猫脸

然后我们会得到以下 输出 窗口 –

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV