首页 > 解决方案 > I want to create lists in order to split to puzzle an image(Python image processing)

问题描述

i have an image (size: X x Y)

i want to split image.

original image :

Sample Image

spliting and changing lists:

Sample Image

if i split 2*2, lists will be following

num is split number 2,3 or more

list1 = img[0:round(x/num), 0:round(y/num)]   
list2 = img[0:round(x/num), round(y/num):y]  
list3 = img[round(x/num):x, 0:round(y/num)]  
list4 = img[round(x/num):x, round(y/num):y]

if i split 3*3, lists will be

list1 = img[0:round(x/num),              0:round(y/num)]
list2 = img[round(x/num):round(2*x/num), 0:round(y/num]
list3 = img[round(2*x/num):x,            0:round(y/num)]
list4 = img[0:round(x/num),              round(y/num):round(2*y/num)]
list5 = img[round(x/num):round(2*x/num), round(y/num):round(2*y/num)]
list6 = img[round(2*x/num):x,            round(y/num):round(2*y/num)]
list7 = img[0:round(x/num),              round(2*y/3):y]
list8 = img[round(x/num):round(2*x/num), round(2*y/3):y]
list9 = img[round(2*x/num):x,            round(2*y/3):y]

for 4*4 lists will be 16

how can i write code in loop for this question?

标签: pythonimagelist

解决方案


图像可以表示为每种基本颜色(红、绿、蓝)的二维数组列表。例如,您可以使用以下方式加载图像scipy.misc.imread

from scipy.misc import imread

img_rgb = imread("sample.jpg")

对于每个颜色数组,您可以连续使用np.array_split(NumPy 函数)沿给定维度拆分数组,如下

def split_img(img, num):
    # Here, img is a 2D array
    img_split = [ np.array_split(A, num, axis = 0) for A in np.array_split(img, num, axis = 1) ]
    # Flatten the output into a list of 2D arrays
    return [ item for sublist in img_split for item in sublist ]

num = 4
img_r_split = split_img(img_rgb[:,:,0], num)
img_g_split = split_img(img_rgb[:,:,1], num)
img_b_split = split_img(img_rgb[:,:,2], num)

最后,您必须将拆分的颜色数组收集到一个 RGB 数组中,如下

img_rgb_split = [ np.stack((r, g, b), axis = -1) for r, g, b in zip(img_r_split, img_g_split, img_b_split) ]

例如,您可以使用它plt.imshow来显示您的分割图像

plt.imshow(img_rgb_split[0])

推荐阅读