OpenCV颜色\u bgr2gray

2024-03-28 09:58:54 发布

您现在位置:Python中文网/ 问答频道 /正文

关于这个函数抛出错误有很多问题,比如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文件/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

这些文件都是彩色的,所以我不知道为什么脚本会处理其中的一些而不是其他的。有时更改顺序或文件名(但不更改扩展名)会更改脚本是否运行,但不会以我可以识别的任何模式运行。


Tags: 文件the函数in图像importhereos
1条回答
网友
1楼 · 发布于 2024-03-28 09:58:54

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

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

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

您可以使用print(image.shape)检查频道数。如果值为“无”,则说明文件未正确读取。

相关问题 更多 >