0


OpenCV-Python实战(番外篇)——基于 Haar 级联的猫脸检测器

OpenCV-Python实战(番外篇)——基于 Haar 级联的猫脸检测器

前言

在《人脸检测详解》中我们已经详细介绍了

OpenCV

中提供的基于

Viola

Jones

提出对象检测框架的人脸检测算法,我们同时也了解了,该对象检测框架也可用于检测其他物体,例如:车牌号或猫脸等。在本节中,我们将使用此框架检测猫脸。

基于 Haar 级联的猫脸检测器

基于

Haar

特征的级联分类器可用于检测人脸以外的对象,

OpenCV

库中提供了两个级联分类器文件用于猫脸检测。接下来我们使用这两个检测器来检测图像中的正面猫脸。
此程序《人脸检测详解》中介绍的代码非常相似,关键在于修改了加载的两个级联分类器文件,可以从 OpenCV 官方下载这些级联分类器文件:

  • haarcascade_frontalcatface.xml
  • haarcascade_frontalcatface_extended.xml

从加载的图像,到检测和绘制猫脸检测框的完整代码如下:

# 可视化函数defshow_img_with_matplotlib(color_img, title, pos):
    img_RGB = color_img[:,:,::-1]
    ax = plt.subplot(2,2, pos)
    plt.imshow(img_RGB)
    plt.title(title, fontsize=8)
    plt.axis('off')defshow_detection(image, faces):"""在每个检测到的人脸上绘制一个矩形进行标示"""for(x, y, w, h)in faces:
        cv2.rectangle(image,(x, y),(x + w, y + h),(255,0,0),5)return image

# 加载图像
img = cv2.imread("cat_face_detection.jpg")# 将 BGR 图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 加载分类器文件
cas_catface = cv2.CascadeClassifier("haarcascade_frontalcatface.xml")
cas_catface_extended = cv2.CascadeClassifier("haarcascade_frontalcatface_extended.xml")# 检测正面猫脸
faces_cas_catface = cas_catface.detectMultiScale(gray)
faces_cas_catface_extended = cas_catface_extended.detectMultiScale(gray)
retval, faces_haar_cat = cv2.face.getFacesHAAR(img,"haarcascade_frontalcatface.xml")
faces_haar_cat = np.squeeze(faces_haar_cat)
retval, faces_haar_cat_extended = cv2.face.getFacesHAAR(img,"haarcascade_frontalcatface_extended.xml")
faces_haar_cat_extended = np.squeeze(faces_haar_cat_extended)# 绘制人脸检测框
img_cas_catface = show_detection(img.copy(), faces_cas_catface)
img_cas_catface_extended = show_detection(img.copy(), faces_cas_catface_extended)
img_faces_haar_cat = show_detection(img.copy(), faces_haar_cat)
img_faces_haar_cat_extended = show_detection(img.copy(), faces_haar_cat_extended)# 可视化
show_img_with_matplotlib(img_cas_catface,"detectMultiScale(frontalcatface): "+str(len(faces_cas_catface)),1)
show_img_with_matplotlib(img_cas_catface_extended,"detectMultiScale(frontalcatface_extended): "+str(len(faces_cas_catface_extended)),2)
show_img_with_matplotlib(img_faces_haar_cat,"getFacesHAAR(frontalcatface): "+str(len(faces_haar_cat)),3)
show_img_with_matplotlib(img_faces_haar_cat_extended,"getFacesHAAR(frontalcatface_extended): "+str(len(faces_haar_cat_extended)),4)
plt.show()

此程序的输出结果如下图所示:

基于 Haar 级联的猫脸检测器

相关链接

OpenCV-Python实战(14)——人脸检测详解


本文转载自: https://blog.csdn.net/LOVEmy134611/article/details/121006442
版权归原作者 盼小辉丶 所有, 如有侵权,请联系我们删除。

“OpenCV-Python实战(番外篇)——基于 Haar 级联的猫脸检测器”的评论:

还没有评论