gpt4 book ai didi

python - 将 bool numpy 数组转换为枕头图像

转载 作者:太空狗 更新时间:2023-10-30 02:07:30 25 4
gpt4 key购买 nike

我目前正在使用 scikit-image 库在 python 中进行图像处理。我正在尝试使用以下代码使用 sauvola 阈值制作二进制图像:

from PIL import Image
import numpy
from skimage.color import rgb2gray
from skimage.filters import threshold_sauvola

im = Image.open("test.jpg")
pix = numpy.array(im)
img = rgb2gray(pix)

window_size = 25
thresh_sauvola = threshold_sauvola(img, window_size=window_size)
binary_sauvola = img > thresh_sauvola

结果如下: enter image description here

输出是一个 numpy 数组,该图像的数据类型是 bool

[[ True  True  True ...  True  True  True]
[ True True True ... True True True]
[ True True True ... True True True]
...
[ True True True ... True True True]
[ True True True ... True True True]
[ True True True ... True True True]]

问题是我需要使用以下代码行将此数组转换回 PIL 图像:

image = Image.fromarray(binary_sauvola)

这使得图像看起来像这样:

enter image description here

我还尝试将数据类型从 bool 更改为 uint8,但我会得到以下异常:

AttributeError: 'numpy.ndarray' object has no attribute 'mask'

到目前为止,我还没有找到一个解决方案来获得看起来像阈值处理结果的 PIL 图像。

最佳答案

更新

此错误现已在 Pillow==6.2.0 中解决。 GitHub 上问题的链接是 here .

如果您无法更新到新版本的 Pillow,请参阅下文。


PIL 的 Image.fromarray 函数存在模式“1”图像的错误。 This Gist演示了错误,并显示了一些解决方法。以下是最好的两个解决方法:

import numpy as np
from PIL import Image

# The standard work-around: first convert to greyscale
def img_grey(data):
return Image.fromarray(data * 255, mode='L').convert('1')

# Use .frombytes instead of .fromarray.
# This is >2x faster than img_grey
def img_frombytes(data):
size = data.shape[::-1]
databytes = np.packbits(data, axis=1)
return Image.frombytes(mode='1', size=size, data=databytes)

另见 Error Converting PIL B&W images to Numpy Arrays .

关于python - 将 bool numpy 数组转换为枕头图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50134468/

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