Как разделить изображения, имеющие разные размеры, хранящиеся в списке в Python - PullRequest
0 голосов
/ 08 октября 2018

У меня есть список (Cyst_intensity) длины l, содержащий значения области контура изображений в измерении (n x 3).то есть список списков.

Где 3 представляет три канала, а n представляет строки, имеющие значения изображения.

enter image description here

Я хочу сохранить канал Красный, Синий, Зеленый отдельно в списке.

# Cyst pixel generator
cyst_intensity= []

# For each list of contour points...
for i in range(len(cystcontours)):
    # Create a mask image that contains the contour filled in
    cimg = np.zeros_like(image)
    cv.drawContours(cimg, cystcontours, i, color=255, thickness=-1)

    # Access the image pixels and create a 1D numpy array then add to list
    pts = np.where(cimg == 255)
    #Cyst_intensity will contain the original image contour pixel value  
    cyst_intensity.append(image[pts[0], pts[1]])

#separating into channels and averaging out 
B=[]
G=[]
R=[]
cystcolours=[]
i=0
for m in iter(cyst_intensity):
    for j in m[i][0]:
        B.append(j)
        i+=1
    i=0
    for k in m[i][1]:
        G.append(k)
        i+=1
    i=0
    for q in m[i][2]:
        R.append(q)
        i+=1
    cystcolours.append([avg(B),avg(G),avg(R)])

При выполнении приведенного выше кода я получаю следующую ошибку.

Traceback (most recent call last):
  File "<input>", line 7, in <module>    
TypeError: 'numpy.uint8' object is not iterable

Как решить эту проблему?

1 Ответ

0 голосов
/ 08 октября 2018

Хотя я не знаю, как вы храните изображения, я полагаю, что ваше изображение хранится в формате kx3, где k - это пиксель.Ваша ошибка в том, что m [i] [j] - это одно значение, а не массив, и я думаю, что это ваша ошибка.Поэтому, если вы хотите перебрать все строки изображения, вы должны сделать что-то вроде этого.

for image in cyst_identity:
 for pixel in image:
  R.append(pixel[0])
  G.append(pixel[1])
  B.append(pixel[2])
 #get average here. Outside the inner loop

Если вы храните каждое изображение типа nxn, где каждая ячейка этого 2D-массива представляет собой пиксельтогда вышеупомянутое не будет работать.Я не могу воспроизвести проблему, так как информация для своего ответа была неполной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...