Python OpenCV - CascadeClassifier Haarcascade detectMultiScale() 不工作

问题描述

我从前几天开始通过 Python v3.8.5 学习 OpenCV,但在 Facedetection 上陷入了 CascadeClassifier。遵循与导师相同的代码https://www.youtube.com/watch?v=LopYA64KmdE 时间戳:08:40

我在资源文件夹中有图像和 haarcascade_frontalface_default.xml 文件

不过,我没有得到以下代码的任何输出。我也尝试更改图像文件,但仍然没有输出。当我尝试打印它时,它会打印到“foo1”。所以我怀疑问题出在 detectMultiScale() 方法上。

这是我的代码

import cv2

face_cascade = cv2.CascadeClassifier('resources\haarcascade_frontalface_default.xml')

# img = cv2.imread('resources\\lena.jpg')
# img = cv2.imread('D:\photos\house\DSCF2736 copy.jpg')
img = cv2.imread('resources\\messi5.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

print('foo1')
faces = face_cascade.detectMultiScale(gray,1.1,4)
print('foo2')

for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+h,y+w),(0,255,0),2)

cv2.imshow('out',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我使用的是 Windows7 32 位 PC。这是由于操作系统支持问题吗?请告诉我解决方案。

谢谢

解决方法

我猜你应该在 [x,y,w,h,] 循环中写 (x,h)x,h 而不是 for 因为给定的 detectMultiScale 函数生成一个包含多个 {{ 1}} 每个面和列表的元素只能存储在列表对象或元组中。

,

它在资源文件夹中,但是当前工作目录是否相对于调用脚本正确设置。当此 xml 文件的路径由于某种或其他原因未正确设置时,会出现一个常见问题 - 尝试使用绝对路径或将其复制到包含脚本的文件夹中,然后从该文件夹中的命令行调用。

见: OpenCV Facial Detection come ups with this error

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...