【发布时间】:2019-06-26 05:42:37
【问题描述】:
关于这个函数抛出错误有很多问题,例如here 和here,但我认为我的问题有一个独特的转折点。我要做的是浏览文件夹中的所有图像并检测任何面孔。
import cv2
import sys
import os
#Get the folder to be searched and the location of the cascade file from arguments
imageDirectory = sys.argv[1]
cascadePath = sys.argv[2]
faceCascade = cv2.CascadeClassifier(cascadePath)
#Iterate over the png files in the directory
for imagePath in os.listdir(imageDirectory):
if imagePath.endswith(".png"):
image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30)
#flags = cv2.CV_HAAR_SCALE_IMAGE
)
第一个图像会被正确处理,但是第二个会抛出错误:
OpenCV 错误:cvtColor 中的断言失败 (scn == 3 || scn == 4),文件 /tmp/opencv3-20170202-24427-1s95vpr/modules/imgproc/src/color.cpp,第 9748 行 回溯(最近一次通话最后): 文件“face_detect_flip.py”,第 22 行,在 灰色 = cv2.cvtColor(图像,cv2.COLOR_BGR2GRAY) cv2.error: /tmp/opencv3-20170202-24427-1s95vpr/modules/imgproc/src/color.cpp:9748: 错误: (-215) scn == 3 ||函数 cvtColor 中的 scn == 4
这些文件都是彩色 .png,所以我不知道为什么脚本可以在其中一些文件上运行,而在其他文件上不行。有时更改顺序或文件名(但不是扩展名)会改变脚本是否运行,但不会以我能辨别的任何模式。
【问题讨论】:
-
不出所料,
cv2.imread可能无法加载图像。对此进行测试并适当地处理这种情况往往是一种好习惯。你没有这样做。 -
但是为什么更改文件名或文件加载顺序会导致失败?当然我可以测试它,但我仍然想在某个时候加载它。
-
如果没有相关的上下文很难判断,在这种情况下,这将是您为程序提供的参数以及您告诉它要处理的目录的内容。另外,您能否详细说明“更改顺序或文件名”的含义?也许提供一些例子说明什么有效,什么无效? |显然,您想将其加载为某个点。测试的原因之一是在问题发生时清楚地识别问题 - 看到“无法加载文件 'foo.png'”之类的内容比您显示的错误更有意义。