Why am I getting "ValueError: Wrong number of lut entries"?

Why am I getting "ValueError: Wrong number of lut entries"?

我正在尝试构建一个非常简单(甚至可能没有用)的图像降噪器,但我遇到了这段特定代码的问题:

im=Image.open("Test.jpg")
width=im.size[0]
Lim=im.convert("L")
threshold = 250
table = []
for i in range(width):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
Bim=Lim.point(table, "1")
Bim.save("BINvalue.bmp","BMP")

它给我这个错误:

ValueError: Wrong number of lut entries

我是不是漏掉了一些非常简单的东西?还是整件事都错了?我还是一名学生,在 Python.

方面没有太多经验

Image.point() 方法采用查找 table 或函数对每个像素进行操作。 查找 table 可能有点复杂。所以推荐使用函数。该函数适用于每个像素。

from PIL import Image
im=Image.open("Test.jpg")
width=im.size[0]
Lim=im.convert("L")
threshold = 250
# if pixel value smaller than threshold, return 0 . Otherwise return 1.
filter_func = lambda x: 0 if x < threhold else 1 
Bim=Lim.point(filer_func, "1")
Bim.save("BINvalue.bmp","BMP")

我们使用 Image.point() 函数将灰度图像变成黑色,white.The 函数有两个参数,第一个参数是一个查找 table 确定转换 rules.The table会检测图像每个像素点的灰度值,根据阈值和灰度值的比较,重新赋值为1/0。

如果你使用循环函数构造一个table,你需要将你的循环范围限制在灰度值的数量而不是你的image.You的大小可以改变你的循环函数像这个:

for i in range(256): 
    if i < threshold:
        table.append(0)
    else:
        table.append(1)

也许你可以参考这个Image.point()