将图像转换为其他
Transform image into other
使用 PIL 和 tkinter,我正在尝试对图像的 pixelMatrix 进行一些操作,例如:
start = Image.open("gua.jpg")
sta = start.load()
i,j = start.size
current = np.zeros((i,j,3))
for ix in range(i):
for jx in range(j):
current[ix,jx] = [elem*0.5 for elem in sta[ix,jx]]
current = np.asarray(current)
current = Image.fromarray(current, "RGB")
out = ImageTk.PhotoImage(current)
panel.configure(image = out)
panel.image = out
但即使我只是将信息从图像的 pixelMatrix 传递到我的矩阵 (current[ix,jx] = sta[ix,jx]
),我的结果是随机的,我做错了什么?
谢谢!
P.S:我可以out = ImageTk.PhotoImage(start)
没有问题。
您需要指定数组的 dtype
为 np.uint8
:
current = np.zeros((i,j,3),dtype=np.uint8)
如果在 PIL 在数组上使用 .tobytes()
方法时未指定此项,它会获取对 "RGB"
没有意义的数据,因为它用于浮点数。
另请注意,fromarray
逐行获取数据,因此高度需要是数组的第一个维度,您可以通过简单地在将 transpose
传递给 fromarray
:
img = Image.fromarray(current.transpose(1,0,2))
使用 PIL 和 tkinter,我正在尝试对图像的 pixelMatrix 进行一些操作,例如:
start = Image.open("gua.jpg")
sta = start.load()
i,j = start.size
current = np.zeros((i,j,3))
for ix in range(i):
for jx in range(j):
current[ix,jx] = [elem*0.5 for elem in sta[ix,jx]]
current = np.asarray(current)
current = Image.fromarray(current, "RGB")
out = ImageTk.PhotoImage(current)
panel.configure(image = out)
panel.image = out
但即使我只是将信息从图像的 pixelMatrix 传递到我的矩阵 (current[ix,jx] = sta[ix,jx]
),我的结果是随机的,我做错了什么?
谢谢!
P.S:我可以out = ImageTk.PhotoImage(start)
没有问题。
您需要指定数组的 dtype
为 np.uint8
:
current = np.zeros((i,j,3),dtype=np.uint8)
如果在 PIL 在数组上使用 .tobytes()
方法时未指定此项,它会获取对 "RGB"
没有意义的数据,因为它用于浮点数。
另请注意,fromarray
逐行获取数据,因此高度需要是数组的第一个维度,您可以通过简单地在将 transpose
传递给 fromarray
:
img = Image.fromarray(current.transpose(1,0,2))