在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图片二值化内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论