如何在OpenCV中使用Python检测图像中的猫脸
haar级联分类器是一种有效的对象检测方法。它是一种基于机器学习的方法。要训练用于猫脸检测的haar级联分类器,算法最初需要大量的正面图像(具有猫脸的图像)和负面图像(没有猫脸的图像)。从这些正面和负面的图像中训练分类器,然后用于在其他图像中检测猫脸。
我们可以使用已经训练好的haar级联来进行微笑检测。为了在输入图像中进行微笑检测,我们需要两个haar级联,一个用于人脸检测,另一个用于微笑检测。我们将使用 haarcascade_frontalcatface.xml 来检测图像中的猫脸。
如何下载Haarcascades
您可以在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
我们得到了以下的 输出 窗口-