关于这个函数抛出错误有很多问题,比如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文件/tmp/opencv3-20170202-24427-1s95vpr/modules/imgproc/src/color.cpp的9748行中断言失败(scn==3 | |;scn==4) 回溯(最近一次呼叫时间): 文件“face_detect_flip.py”,第22行,in gray=cv2.cvtColor(图像,cv2.COLOR\u BGR2GRAY) cv2.error:/tmp/opencv3-20170202-24427-1s95vpr/modules/imgproc/src/color.cpp:9748:函数中的错误:(-215)scn==3 | |;scn==4
这些文件都是彩色的,所以我不知道为什么脚本会处理其中的一些而不是其他的。有时更改顺序或文件名(但不更改扩展名)会更改脚本是否运行,但不会以我可以识别的任何模式运行。
看起来导致此错误的图像没有3个(rgb图像)或4个(rgba图像)通道。cvtColor函数需要图像至少有3个通道来转换它。
一个可能的原因是文件没有被正确读取。这将导致变量图像为无,因此它将没有正确的通道数。
另一个原因可能是图像的频道较少。也许这是一个灰度图像开始,因此只有一个通道。
您可以使用print(image.shape)检查频道数。如果值为“无”,则说明文件未正确读取。
相关问题 更多 >
编程相关推荐