【问题标题】:Convert a gray scal imageto bilevel将灰度图像转换为双层
【发布时间】:2011-12-21 08:36:30
【问题描述】:

我正在尝试使用 PIL 的“点”方法将图像转换为二值图像(bilevel),如下所示:

def mappoint (i):
   if i > 1: return 1
   else: return 0

if __name__=="__main__":
   img = Image.open('no.tif')
   img = img.point(mappoint)
   img.save('ok.tif')

但它给了我一个黑色的图像!

编辑:如果我做 def mappoint (i): if i > 1: return 255 那么它会给出一个全白的图像!如果我在 mappoint 中打印 i 的值,它会显示从 0 到 255 的值(就像打印 range(256) 一样),所以每个 i 都不是每个像素的值,是吗?当我们打开图像时,还有另一种方法可以通过使用 convert 来制作双层:img = Image.open(img_name).convert('1') 但默认情况下使用的阈值是 127,如果我们想要另一个阈值,文档说使用点方法

【问题讨论】:

    标签: python image python-imaging-library


    【解决方案1】:

    该功能确实有效,您已经生成了包含 0 和 1 的图像。它看起来是黑色的原因是因为标准图像的强度在 0 到 255 之间。

    如您所做的那样,强度为 1 看起来是黑色的,因为在 0 到 255 的范围内,1 非常接近于 0。

    如果您想要黑白图像,请将您的 mappoint 更改为 if i>1: return 255

    【讨论】:

    • 如果我这样做 def mappoint (i): if i > 1: return 255 那么它会给出一个全白的图像!如果我在 mappoint 中打印 i 的值,它会显示从 0 到 255 的值(就像打印 range(256) 一样),所以每个 i 都不是每个像素的值,是吗?当我们打开图像时,还有另一种方法可以通过使用 convert 来制作双层:img = Image.open(img_name).convert('1') 但默认情况下使用的阈值是 127,如果我们想要另一个阈值,文档说使用点方法。
    • 嗯,你想要什么阈值?您尝试默认阈值了吗?你对这个结果有什么不满意的地方?
    • 如果您查看 mappoint 定义...您已将阈值设置为 1。因此只有黑色像素(以及非常接近黑色的像素)将保持黑色,其余像素将保持黑色白色的。您正在测试的图像可能没有足够的黑色像素让您注意到.....尝试将阈值更改为 127 以了解我的意思。
    • 使用def mappoint (i): if i > 127: return 255 仍然给出全白图像,我不确定这是我们如何使用点法阈值! @KarlKnechtel 我想使用点法,因为使用img = Image.open(img_name).convert('1')(默认使用阈值127)不会给出好的结果:请参阅original image 以及如果我使用 .convert('1') 会得到什么:resulting image
    • 这正是您应该如何使用point。问题是您必须为您的特定图像选择正确的阈值,这对我们来说像以前一样很难做到,现在我们从来没有您的图像示例!为什么不检查图像的强度以选择合适的阈值。例如,尝试 200。
    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多