如何使用pytesseract获取图像中每行文本的边界框?
解决方法
直接利用pytesseract的image_to_data函数可以直接获取行级文本和对应的边界框,无需手动从字符框拼接。以下是实现代码:
import cv2 import pytesseract def image_to_line_boxes(img): # 获取包含层级信息的结构化数据 data = pytesseract.image_to_data(img, output_type=pytesseract.Output.DICT) line_boxes = [] total_entries = len(data['level']) for i in range(total_entries): # 筛选行级条目(level=2),同时跳过空文本行 if data['level'][i] == 2 and data['text'][i].strip(): line_text = data['text'][i].strip() # 计算边界框的四个坐标 x1 = data['left'][i] y1 = data['top'][i] x2 = x1 + data['width'][i] y2 = y1 + data['height'][i] confidence = data['conf'][i] # 按要求格式拼接边界框字符串 box_str = f"{x1} {y1} {x2} {y2} {confidence}" line_boxes.append((line_text, box_str)) return line_boxes # 调用示例 img = cv2.imread("你的图片路径.jpg") boxes = image_to_line_boxes(img)
说明
image_to_data返回的字典包含多维度信息:level字段区分层级(1=页面、2=行、3=词、4=字符),我们直接取level=2的行级数据即可。- 行文本会自动包含空格,无需手动拼接单个字符。
- 边界框坐标计算逻辑和
image_to_boxes保持一致,符合你需要的格式。
内容的提问来源于stack exchange,提问作者RandomPersonOnline
相关产品推荐
相关产品推荐

