问题描述
我从前几天开始通过 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 文件的路径由于某种或其他原因未正确设置时,会出现一个常见问题 - 尝试使用绝对路径或将其复制到包含脚本的文件夹中,然后从该文件夹中的命令行调用。