Python中图片二值化代码在Windows和Deepin下运行结果不同,如何解决?

代码是一样的,但是 windows 下二值化后线条比较粗, deepin 下二值化后线条较细。这是为什么?

windows 下:

deepin 下:


Python中图片二值化代码在Windows和Deepin下运行结果不同,如何解决?

5 回复

系统不一样
这就变成讨论系统了


这个问题通常是因为不同系统上图像库的默认处理方式或依赖库版本差异导致的。核心是确保二值化逻辑严格一致,不受系统环境影响。

最可靠的方案是使用PIL/Pillow并明确指定灰度转换和二值化参数。下面是一个跨平台的标准二值化代码:

from PIL import Image
import numpy as np

def uniform_binarize(image_path, threshold=128):
    # 1. 统一用PIL打开并明确转换为灰度图
    img = Image.open(image_path).convert('L')
    
    # 2. 使用numpy进行明确阈值处理
    img_array = np.array(img)
    binary_array = (img_array > threshold).astype(np.uint8) * 255
    
    # 3. 统一保存格式
    result = Image.fromarray(binary_array)
    return result

# 使用示例
result_img = uniform_binarize('input.jpg', threshold=128)
result_img.save('output_binary.jpg')

关键点:

  1. .convert('L')确保灰度转换方式一致
  2. 使用明确的数值阈值(0-255范围)
  3. 避免使用Image.point()等可能因Pillow版本产生差异的方法
  4. 通过numpy数组操作保证二值化逻辑完全可控

如果还有差异,检查两个系统上的Pillow版本是否一致,用pip install Pillow==9.5.0固定版本。

建议直接控制灰度转换和阈值处理逻辑。

这样子明显原图都不一样啊。。一个 g 是正的一个是歪的(原图粗细也有可能不同)。。。原图能否展示一下呢。。。

我又去试了一下,结果发现只有以前下载的图片才会又这样的现象。即使我用代码同时在两个平台上下载图片,发现二值化后的线条也是细的。现在我没办法知道之前的图片和现在的图片为什么用相同的代码下载会有不同的结果。

因为原来的代码下载图片二值化后也是和 deepin 下一样的结果。。。

回到顶部