Хотите добавить цветные изображения в список и преобразовать этот список в оттенки серого, используя OpenCV - PullRequest
0 голосов
/ 28 июня 2018

Итак, в основном я пытаюсь преобразовать набор изображений RGB в оттенки серого, используя cv2.cvtColor, а python выдает следующую ошибку:

Traceback (последний вызов был последним): Файл "MCG.py", строка 53, в серый = cv2.cvtColor (данные, cv2.COLOR_BGR2GRAY)
TypeError: src - это не пустой массив и не скаляр.

Вот этот код:

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 голосов
/ 28 июня 2018

Если вы прочитаете документацию cv2.cvtColor , вы увидите, что первым параметром является 8-битное Src-изображение с одним каналом. Тем не менее, в вашем случае вы даете полный список изображений. Поэтому измените код на

gray = []
for j in range(0,len(data)):
    gray.append(cv2.cvtColor(np.array(data[j]), cv2.COLOR_BGR2GRAY))

Полагаю, это должно сработать.

0 голосов
/ 28 июня 2018

Вы собираете изображения в список с

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

Это даст вам список изображений в оттенках серого, что, я думаю, вы хотите сделать.

...