想要将彩色图像添加到列表中,然后使用OpenCV将该列表转换为灰度

时间:2018-06-28 13:33:32

标签: python numpy opencv image-processing computer-vision

因此,基本上我正在尝试使用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如果有人想知道为什么我导入了本代码中似乎没有使用的模块,那么此代码只是整个过程的一部分,而所有这些模块都以一种或另一种方式被利用。

2 个答案:

答案 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))

我想这应该可行。