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
进行可视化验证。