FD**-我是一个Python新手,正如你所知,我是一个堆栈溢出新手。我根据评论编辑了这个问题。
我的目标是读取一组PNG文件,用Image.open('filename')创建图像,并将其转换为只有1和0的简单二维数组。PNG的格式是RGBA,其值大多只有255和0。在图像中,边缘通常是灰度值,我希望在二维数组中避免这种情况。
我用np.asarray(图像)创建了2D数组,只得到“红色”通道。在每个2d图像数组中,如果当前值不为零,我想将单元格值设置为1。
所以,我循环到2d数组中,检查单元格的值并尝试将其设置为1。
它给了我一个错误,表明数组是只读的。我阅读了几个堆栈溢出线程,讨论了np数组是不可变的,这仍然有点不清楚。我用皮尔和努比
谢谢@user2314737。我会试着插上那面旗子。 @埃里克,也谢谢你的评论。
from PIL import Image
import numpy as np
相关代码:
prArray = [np.asarray(img)[:, :, 0] for img in problem_images]
for img in prArray:
for x in range(184):
for y in range(184):
if img[x][y] != 0:
img[x][y] = 1
最后一行出现错误“assignment destination is read-only”。
谢谢大家的帮助。
由于
numpy
版本1.16.0
,以下不再工作:问题是现在
OWNDATA
被设置为False
,并且您不能将WRITEABLE
标志设置为True
。因此,您只需执行以下操作:这将在将数组从
Pillow
对象强制转换为numpy
数组时生成数组的副本。然而,我在numpy
1.16.0
中测试了时间性能,并没有发现两种方法之间有任何明显的差异。检查数组是否可以用
如果
WRITEABLE
为false,则将其更改为在这种情况下,我认为您正在尝试编辑另一个用户提供给您的图像,而他/她使其不可编辑,这就是为什么您会得到这个错误。对于您的情况,您可以尝试复制给定的文件,并使用
.copy()
对该文件进行更改。更重要的是,我不认为我们大多数人都想改变我们的原始图像,这就是为什么我总是使用
.copy()
并建议您也这样做。相关问题 更多 >
编程相关推荐