目前我正在使用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))
无法调用列表对象
应该做些什么改变?
答案 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]
。