【发布时间】:2017-06-08 06:10:35
【问题描述】:
目前我正在使用 Windows 平台开发一个 python 项目,我需要在其中处理图像。 在此之下,我需要将我的图像分成几个部分,然后将它们存储为唯一的图像。 为此,我需要将我的图像转换为浮点数组,然后将其分段 对分割部分进行排序。 但我卡住的地方是存储这些新生成的数组。
例如,如果我的循环运行 6 次,将生成 6 个新数组(例如 300 X 420 大),我需要将它们存储在每次迭代的唯一变量中,这样它们就不会相互重叠。
我该怎么做?
如何将循环中新生成的数组存储到每次迭代的不同数组中?之后我需要这些数组,所以存储它们对我来说很重要。
生成的数组数量也是动态的!
这是代码:
`
#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)
`
注意:生成的数组已经是二维的,大小为 327 X 500。 所以请给我一个存储二维数组的解决方案。 现在我们使用字典、列表还是新变量很重要:)
编辑
根据一些解决方案,我尝试将新生成的数组插入另一个大数组。但是我仍然遇到一些错误。新的代码块是:
#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))
应该做哪些改变?
【问题讨论】:
-
您可以将所有内容存储在一个大数组中
-
您可以使用二维数组或字典。可以分享使用的示例代码吗?
-
它们的数组已经是二维的并且很大。请分享一个示例代码来解释如何将它们存储在一个大数组中。 @moritzg
-
327x500 对于数组来说是一个相当小的尺寸。你想要的是使用一个列表,动态生成的变量通常是一个坏主意。只需在循环之前创建一个空列表
l并在执行过程中将每个新数组附加到其中,以便在您只需调用l[2]或任何其他号码后访问数组。