因此,基本上我正在尝试使用cv2.cvtColor将RGB图像集转换为灰度,而python则抛出以下错误:
回溯(最近通话最近):
在第53行的文件“ MCG.py”中
灰色= cv2.cvtColor(数据,cv2.COLOR_BGR2GRAY)
TypeError:src不是一个numpy数组,也不是一个标量。
这是代码:
import numpy as np
import cv2
import dlib
import sys
import skimage
from PIL import Image
import os
import glob
folderpath = sys.argv[1]
cascPath = sys.argv[2]
imageformat = ".tif"
path = folderpath
imfilelist = [os.path.join(path,f) for f in os.listdir(path) if f.endswith(imageformat)]
data = []
for IMG in imfilelist:
print IMG
image = cv2.imread(IMG)
data.append(image)
cv2.imshow('Image', image)
cv2.waitKey(0)
faceCascade = cv2.CascadeClassifier(cascPath)
predictor = dlib.shape_predictor(PREDICTOR_PATH)
gray = cv2.cvtColor(data, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.05,
minNeighbors=5,
minSize=(100,100)
)
如您所见,我正在尝试将所有这些图像附加到列表中,然后使用cv2.cvtColor函数进行转换。但是,将引发该错误。我究竟做错了什么?谢谢。
P.S如果有人想知道为什么我导入了本代码中似乎没有使用的模块,那么此代码只是整个过程的一部分,而所有这些模块都以一种或另一种方式被利用。
答案 0 :(得分:1)
您正在将图像收集到列表中,
data = []
for IMG in imfilelist:
...
data.append(image)
....
,然后尝试使用转换列表
gray = cv2.cvtColor(data, cv2.COLOR_BGR2GRAY)
这就是您收到错误的原因-错误告诉您data
不是图像(numpy数组)而是列表。您需要使用cv2.cvtColor()
一次转换一张图像。
您可以尝试
gray = []
for img in data:
gray.append(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))
这将为您提供灰度图像列表,这是我想您要执行的操作。
答案 1 :(得分:1)
如果您阅读cv2.cvtColor文档,则可以看到第一个参数是Src 8位单通道图像。但是,根据您的情况,您要提供完整的图像列表。 因此,将代码更改为
gray = []
for j in range(0,len(data)):
gray.append(cv2.cvtColor(np.array(data[j]), cv2.COLOR_BGR2GRAY))
我想这应该可行。