如何在python列表中分离具有不同尺寸的图像

时间:2018-10-08 07:50:11

标签: python list

我有一个长度为l list(Cyst_intensity) ,其中包含尺寸为(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 :(得分:0)

尽管我不知道您如何存储图像,但我建议您将图像存储为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数组的每个单元格都是一个像素,则上述方法将不起作用。我无法重现该问题,因为该信息对于确定的答案还不完整。