为什么我得到" ValueError:lut条目数量错误"?

时间:2017-04-17 15:46:33

标签: python image valueerror

我正在尝试构建一个非常简单(可能甚至不是很有用)的图像去噪器,但我对这段特殊代码有疑问:

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经验。

2 个答案:

答案 0 :(得分:1)

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

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")

答案 1 :(得分:0)

我们使用Image.point()函数将灰色图像变为黑白图像。该函数有两个参数,第一个参数是一个确定转换规则的查找表。该表将检测每个像素的灰度值然后将图像重新分配给1/0,这取决于阈值和灰度值之间的比较。

如果使用循环函数构造表,则需要将循环范围限制为灰度值而不是图像的大小。您可以像这样更改循环函数:

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

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