所以,我正在尝试进行这种图像处理练习。我必须在16个相同大小的块中分离512px图像,将它们以预先安排的配置混合,创建** mozaic **。为此,我使用** numpy **库并运行一些**测试**以查看它是如何工作的。那就是说,我有这个代码:
$t1
如您所见,我将图像与索引分开并将其全部放入列表中。然后我试图用这个代替一个“块”:
import numpy as np
from scipy import misc
from scipy import ndimage
import matplotlib.pyplot as plt
img = misc.imread("test.png")
list = [(img[0:128, 0:128]), (img[0:128, 128:256]), (img[0:128, 256:384]), (img[0:128, 384:512]),
(img[128:256, 0:128]), (img[128:256, 128:256]), (img[128:256, 256:384]), (img[128:256, 384:256]),
(img[256:384, 0:128]), (img[256:384, 128:256]), (img[256:384, 256:384]), (img[256:384, 384:512]),
(img[384:512, 0:128]), (img[384:512, 128:256]), (img[384:512, 256:384]), (img[384:512, 384:512])]
list[0] = list[1]
print list[0], '\n\n\n', list[1]
plt.imshow(img)
plt.show()
问题出在我打印时
list[0] = list[1]
他们是平等的,但如果我这样做
print list[0], '\n\n\n', list[1]
我可以看到真正的阵列根本没有改变。 **如何将这些数据库应用于图像数组而不仅仅是列表?**或者有一种简单的方法可以做到这一点?我看了一下numpy的分割功能,但这些功能似乎都没有帮助。
PS:我知道这有效,但我需要处理该列表。
print img[0:128, 0:128],'\n\n', img[0:128, 128:256]
答案 0 :(得分:0)
我不清楚你究竟在问什么 - 你能否设置
img[0:128, 0:128] = img[128:256, 128:256]
或者您正在寻找别的东西吗?
另外,请小心在Python中调用列表list
- list
是Python中的内置类型,更改它可能会让以后在轨道上引起混淆。
答案 1 :(得分:0)
所以你有一个views
的{{1}}列表(不需要())
img
做
alist = [img[0:128, 0:128], img[0:128, 128:256], img[0:128, 256:384], ...]
相当于将列表更改为:
alist[0] = alist[1]
因为该操作只是将alist = [img[0:128, 128:256], img[0:128, 128:256], img[0:128, 256:384], ...]
中的指针更改为alist[0]
中的指针。现在前两个元素是一样的。
alist[1]
会更改alist[0][...] = alist[1]
数组的内容而不更改它指向的对象。换句话说,alist[0]
是一个可变对象,img[0:128, 128:256]
更改内容(如果正确完成)。
这种行为有点棘手。你必须匹配尺寸。我首先写了img[0:128, 128:256][...]=...
然后意识到alist[0][:] = alist[1]
是一个二维数组,所以我需要使用alist[0]
或[:,:]
。
说明较小的数组
[...]