OpenCV阈值处理后如何实现文档全部文字白底黑字适配OCR需求?
阈值处理后统一为白底黑字的实现方案
核心逻辑是二值化后统计像素占比,自动判断是否需要翻转图像:
- 正常白底黑字的文档中,白色像素占比必然高于黑色像素
- 若白色像素占比低于50%,说明当前图像为黑底白字状态,调用像素翻转接口即可得到白底黑字效果
实现代码
import cv2 import numpy as np def thresholding(image): # 二值化处理,可替换为OTSU自动阈值避免手动调参 binary = cv2.threshold(image, 120, 255, cv2.THRESH_BINARY)[1] # 计算白色像素占比 total_pixels = binary.shape[0] * binary.shape[1] white_ratio = np.sum(binary == 255) / total_pixels # 黑底白字场景下翻转图像 if white_ratio < 0.5: binary = cv2.bitwise_not(binary) return binary
优化建议
如果需要适配不同亮度、不同背景的扫描文档,可以将固定阈值替换为OTSU自动阈值,无需手动调整阈值参数,处理鲁棒性更高:
# OTSU自动阈值版本 binary = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
如果文档存在局部深色背景的黑底白字区块,可以结合轮廓检测、局部阈值处理实现分区域翻转,适配更复杂的文档场景。
处理后的图像完全符合OCR识别的白底黑字输入要求,可直接传入识别接口使用。
内容的提问来源于stack exchange,提问作者Sander Berntsen
相关产品推荐
相关产品推荐

