OpenCV color_bgr2gray错误

时间:2017-02-07 20:52:03

标签: python opencv

关于此函数抛出错误有很多问题,例如herehere,但我认为我有一个独特的转折。我想要做的就是浏览文件夹中的所有图像并检测任何面孔。

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行 Traceback(最近一次调用最后一次):   文件" face_detect_flip.py",第22行,in     gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) cv2.error:/tmp/opencv3-20170202-24427-1s95vpr/modules/imgproc/src/color.cpp:9748:错误:(-215)scn == 3 || scn == 4 in function cvtColor

这些文件都是彩色.pngs所以我无法说明为什么脚本会对其中一些文件有效,而对其他文件无效。有时更改顺序或文件名(但不是扩展名)将改变脚本是否运行,但不会改变我能辨别的任何模式。

1 个答案:

答案 0 :(得分:0)

看起来导致此错误的图像没有3(rgb图像)或4(rgba图像)通道。 cvtColor 函数需要图像至少有3个通道才能转换它。

一个可能的原因可能是文件未正确读取。这会导致变量图像为None,因此它没有正确的通道数。

另一个原因可能是图像的通道较少。也许这是一个灰度图像,因此只有一个通道。

您可以使用 print(image.shape)来检查频道数。如果值为None,则表示文件未正确读取。