在python

时间:2017-06-08 06:10:35

标签: python arrays

目前我正在使用Windows平台进行python项目,我需要处理图像。 在此之下,我需要将我的图像分成几个部分,然后将它们存储为唯一的图像。 为此,我需要将我的图像转换为浮点数组,然后将其分段 分割部分已排序。 但我被困的地方是存储这些新生成的数组。

例如,如果我的循环运行6次,将生成6个新数组(大尺寸表示300 X 420)并且我需要将它们存储在每次迭代的唯一变量中,这样它们就不会相互重叠。 / p>

我该怎么做?

如何为每次迭代将新生成的循环数组存储到不同的数组中?之后我需要这些数组,所以存储它们非常重要。

生成的数组也是动态的!

这是代码:

`

#read image and do its segmentation
 image = cv2.imread("Path to input image\\___.png")
 segments = slic(img_as_float(image), compactness=100.0, n_segments = 2,sigma = 5) 
 #loop to generate individual segments and to store them individually
 for (i, segVal) in enumerate(np.unique(segments)):
    print "[x] inspecting segment %d" % (i)
    mask = np.zeros(image.shape[:2], dtype = "uint8")
    mask[segments == segVal] = 255
    s2 = np.array(segments);
    bb= (cv2.bitwise_and(image, image, mask = mask) )
    #above the unique array is generated
    #store the generated array as unique image at desired location
    cv2.imwrite('Path to store\\__.png', bb)

`

注意:生成的阵列已经是2-D,大小为327 X 500。 那么请给我一个存储2-D阵列的解决方案。 现在,我们使用字典,列表或新变量的确很重要:)

修改

根据某些解决方案,我尝试将新生成的数组插入另一个大数组中。但是我仍然会遇到一些错误。新的代码块是:

#read image and do its segmentation
 image = cv2.imread("Path to input image\\___.png")
 segments = slic(img_as_float(image), compactness=100.0, n_segments = 2,sigma = 5) 
 #loop to generate individual segments and to store them individually
 for (i, segVal) in enumerate(np.unique(segments)):
    print "[x] inspecting segment %d" % (i)
    mask = np.zeros(image.shape[:2], dtype = "uint8")
    mask[segments == segVal] = 255
    s2 = np.array(segments);
    results= []
    bb= (cv2.bitwise_and(image, image, mask = mask) )
    results.append(bb)
    #above the unique array is generated and appended into a big array
    #store the generated array as unique image at desired location
    cv2.imwrite('Path to store\\__.png', results(i))

我得到的错误是:

此行cv2.imwrite('Path to store\\__.png', results(i))无法调用列表对象

应该做些什么改变?

1 个答案:

答案 0 :(得分:0)

您无法将它们存储在唯一变量中。但是,您可以创建一个二维数组来存储所有这些数组。例如,如果有3个生成的数组:[1,2,3][4,5,6][7,8,9],则二维数组的结构如下:

[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]

然后,要访问各个数组,只需访问所需的索引,然后访问所需元素的索引即可。例如,要获取第一个数组的第二个元素,可以说arr[0][1]之类的内容。这将返回2

修改

单个阵列是否已经是2-D并不重要。只需添加另一个维度。例如,

# make a big array
bigarray = []

#read image and do its segmentation
 image = cv2.imread("Path to input image\\___.png")
 segments = slic(img_as_float(image), compactness=100.0, n_segments = 2,sigma = 5) 
 #loop to generate individual segments and to store them individually
 for (i, segVal) in enumerate(np.unique(segments)):
    print "[x] inspecting segment %d" % (i)
    mask = np.zeros(image.shape[:2], dtype = "uint8")
    mask[segments == segVal] = 255
    s2 = np.array(segments);
    bb= (cv2.bitwise_and(image, image, mask = mask) )
    #above the unique array is generated
    #store the generated array as unique image at desired location
    cv2.imwrite('Path to store\\__.png', bb)

    # push the generated 2d array to the big array
    bigarray.append(bb)

然后,假设你想要访问第一个二维数组,你可以说bigarray[0]。如果要访问第一个二维数组的左上角像素,可以说bigarray[0][0][0]