0

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

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 方面没有很多经验。

4

2 回答 2

2

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")
于 2017-04-17T16:34:00.073 回答
0

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

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

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

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

于 2018-03-21T08:10:14.070 回答