我正在尝试构建一个非常简单(可能甚至不是很有用)的图像去噪器,但我对这段特殊代码有疑问:
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经验。
答案 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()