Python对图片进行二值化的实现方法

 更新时间:2025年10月16日 08:35:53   作者:detayun  
图像的二值化处理是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果,二值化是图像分割的一种最简单的方法,可以把灰度图像转换成二值图像,本文给大家介绍了Python对图片进行二值化的实现方法,需要的朋友可以参考下

在Python中实现图像二值化主要依赖图像处理库(如OpenCV或PIL)。以下是两种主流方法的详细实现:

方法1:使用OpenCV(推荐高性能场景)

import cv2

# 读取图像(支持路径或直接读取)
image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)  # 直接转为灰度图

# 全局阈值二值化(阈值设为128)
_, binary_image = cv2.threshold(image, 128, 255, cv2.THRESH_BINARY)

# 自适应阈值(适用于光照不均场景)
adaptive_binary = cv2.adaptiveThreshold(
    image, 
    255, 
    cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
    cv2.THRESH_BINARY, 
    11,  # 邻域尺寸(需奇数)
    2    # 常数偏移量
)

# 保存结果
cv2.imwrite('binary_global.jpg', binary_image)
cv2.imwrite('adaptive_binary.jpg', adaptive_binary)

方法2:使用PIL(轻量级方案)

from PIL import Image, ImageOps

# 打开图像并转为灰度
img = Image.open('input.jpg').convert('L')

# 手动二值化(阈值128)
binary_img = img.point(lambda p: 255 if p > 128 else 0)

# 使用内置二值化方法
binary_img_builtin = ImageOps.colorize(
    img, 
    black="black", 
    white="white", 
    threshold=0.5  # 0.0-1.0范围
)

# 保存结果
binary_img.save('pil_binary.jpg')
binary_img_builtin.save('pil_builtin_binary.jpg')

关键参数说明

阈值选择

  • 全局阈值:128(中值)适用于对比度均匀的图像
  • 自适应阈值:通过adaptiveThreshold自动计算局部阈值
  • Otsu方法:cv2.THRESH_OTSU标志可自动计算最优阈值

注意事项

  • 安装依赖:pip install opencv-python pillow
  • 输入路径:确保图像文件存在或使用绝对路径
  • 颜色空间:处理前统一转为灰度图(cv2.COLOR_BGR2GRAY
  • 内存管理:大图像建议分块处理

扩展优化

  • 大津法(OTSU):在cv2.threshold中添加cv2.THRESH_OTSU标志
  • 颜色二值化:对彩色 图像各通道分别处理后合并
  • 形态学操作:二值化后配合cv2.morphologyEx优化边缘

以上代码可直接复制运行,根据实际场景选择OpenCV(高性能)或PIL(轻量级)方案。处理前建议备份原始图像,处理后可通过matplotlib进行可视化验证。

到此这篇关于Python对图片进行二值化的实现方法的文章就介绍到这了,更多相关Python图片二值化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 从基础到进阶带你玩转Python中的异常处理

    从基础到进阶带你玩转Python中的异常处理

    在编程过程中,我们经常会遇到各种运行时错误,比如除零错误、文件未找到错误等,本文将介绍Python异常处理的基础知识,希望对大家有所帮助
    2025-01-01
  • python抓取文件夹的所有文件

    python抓取文件夹的所有文件

    这篇文章主要为大家详细介绍了python抓取文件夹的所有文件,包括子文件夹和子文件夹的文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 利用Python+阿里云实现DDNS动态域名解析的方法

    利用Python+阿里云实现DDNS动态域名解析的方法

    这篇文章主要介绍了利用Python+阿里云实现DDNS动态域名解析的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • python写入已存在的excel数据实例

    python写入已存在的excel数据实例

    下面小编就为大家分享一篇python写入已存在的excel数据实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python 用for循环实现1~n求和的实例

    python 用for循环实现1~n求和的实例

    今天小编就为大家分享一篇python 用for循环实现1~n求和的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • 常见的python正则用法实例讲解

    常见的python正则用法实例讲解

    这篇文章为大家详细主要介绍了常见的python正则用法实例,列举Python正则表达式的几种匹配用法,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 对python修改xml文件的节点值方法详解

    对python修改xml文件的节点值方法详解

    今天小编就为大家分享一篇对python修改xml文件的节点值方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python + uiautomator2手机自动化控制超详细教程

    Python + uiautomator2手机自动化控制超详细教程

    在移动应用开发领域,APP自动化测试至关重要,这篇文章主要介绍了Python+uiautomator2手机自动化控制的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-03-03
  • python实现矩阵和array数组之间的转换

    python实现矩阵和array数组之间的转换

    今天小编就为大家分享一篇python实现矩阵和array数组之间的转换,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python实现指定字符串补全空格的方法

    python实现指定字符串补全空格的方法

    这篇文章主要介绍了python实现指定字符串补全空格的方法,涉及Python中rjust,ljust和center方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04

最新评论