gpt4 book ai didi

python-3.x - 从 scikit 数组转换为 PIL photoimage 的图像被扭曲

转载 作者:行者123 更新时间:2023-12-03 15:52:48 28 4
gpt4 key购买 nike

我正在尝试将由 scikit-image 和 scipy 处理过的图像添加到 tkinter gui。要将其添加到 Canvas ,需要将其另存为 png 或转换为 PIL 图像。但是,当我尝试使用 ImageTkImage.fromarray() 时,它会严重扭曲图像。我不想将其保存为 png,因为它只是生成数据标签的中间步骤。

我尝试检查数组的形状,它们是一样的。我试着打印出图像,filled_objects 是正确的图像,而 im 是扭曲的。所以这在 Tkinter gui 中不是问题。此外,如果我不使用 np.asarray(),它会产生相同的输出。

def generateCanny(imageName):
#imagename should be a path to the image, created with os path join
img = skimage.io.imread(imageName)
print('orig {}'.format(img.shape))

gray = np.sqrt((img*img).sum(-1))
#converts the image to greyscale

edges = skimage.feature.canny(gray, sigma=3)

fill = scipy.ndimage.binary_fill_holes(edges)
return fill

imageName = os.path.join(imagePath, imageStr)
filled_objects = generateCanny(imageName)
a = np.asarray(filled_objects)
im = PIL.Image.fromarray(a)

下面是两张图,左边是im,右边是filled_objects

scikit to PIL image conversion distortion

我认为您可以轻松地转换它,因为 filled_objects 只是一个数组,但 Image.fromarray() 必须进行一些处理。

最佳答案

问题是 fromarray 没有正确解释 bool 数组 a。如果您将 a 转换回 RGB,使用:

# Extend the array into 3 dimensions, repeating the data:
a = np.repeat(a[...,None],3,axis=2).astype(np.uint8)
# Scale to 0-255:
a = 255*a
im = PIL.Image.fromarray(a)

然后 im.show() 将显示正确的图像。

关于python-3.x - 从 scikit 数组转换为 PIL photoimage 的图像被扭曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891674/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com