如何修改指定代码实现文本Bounding Box定位及白底文本提取
文本Bounding Box绘制与提取实现
实现步骤
- 读取图像并转灰度,通过二值化反转处理突出深色背景上的白色文本
- 用Tesseract OCR检测文本位置,获取每个文本块的Bounding Box信息
- 在原图上绘制红色边框标记文本区域
- 提取每个文本区域,粘贴到白色背景画布上
完整代码
import cv2 import pytesseract import numpy as np from pytesseract import Output # 若Tesseract未加入系统环境变量,手动指定安装路径 # pytesseract.pytesseract.tesseract_cmd = r'你的Tesseract安装路径\tesseract.exe' def handle_text_image(img_path): # 读取目标图片 img = cv2.imread(img_path) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化反转,适配黑底白字场景 _, binary_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 获取OCR检测的详细数据 ocr_data = pytesseract.image_to_data(binary_img, output_type=Output.DICT) box_count = len(ocr_data['text']) # 绘制Bounding Box到原图 marked_img = img.copy() for i in range(box_count): # 过滤无效文本(空内容或置信度低于60的结果) if int(ocr_data['conf'][i]) > 60 and ocr_data['text'][i].strip(): x, y, w, h = ocr_data['left'][i], ocr_data['top'][i], ocr_data['width'][i], ocr_data['height'][i] cv2.rectangle(marked_img, (x, y), (x+w, y+h), (0, 0, 255), 2) # 提取文本到白色背景 white_bg = 255 * np.ones_like(img) for i in range(box_count): if int(ocr_data['conf'][i]) > 60 and ocr_data['text'][i].strip(): x, y, w, h = ocr_data['left'][i], ocr_data['top'][i], ocr_data['width'][i], ocr_data['height'][i] # 截取文本区域 text_area = img[y:y+h, x:x+w] # 粘贴到白色背景对应位置 white_bg[y:y+h, x:x+w] = text_area # 保存结果 cv2.imwrite('带边框标记的图片.jpg', marked_img) cv2.imwrite('白背景提取文本.jpg', white_bg) # 可选:显示结果窗口 cv2.imshow('标记后的图片', marked_img) cv2.imshow('白背景文本', white_bg) cv2.waitKey(0) cv2.destroyAllWindows() # 调用处理目标图片 handle_text_image('W2LeK.jpg')
注意事项
- 用
THRESH_BINARY_INV反转颜色,是为了将黑底白字转换为白底黑字,匹配Tesseract的默认识别偏好,提升检测准确率 - 置信度阈值可根据实际识别效果调整,数值越高过滤掉的低质量结果越多
- 如果文本存在倾斜,可额外加入旋转矫正步骤,进一步优化定位效果
依赖安装
先安装Python库:
pip install opencv-python pytesseract numpy
再安装Tesseract OCR引擎,根据自身系统下载对应版本即可。
内容的提问来源于stack exchange,提问作者VRashi
相关产品推荐
相关产品推荐

