You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PaddleOCR BoundingBox输出格式说明及手动绘框异常解决

PaddleOCR边界框格式说明

PaddleOCR返回的检测框不是「左上角+右下角」的两点矩形格式,而是按顺时针顺序排列的4个顶点坐标,固定顺序为:[左上角点, 右上角点, 右下角点, 左下角点]。这种格式支持标记倾斜、旋转的文本块,不能直接取首尾两点作为矩形对角点绘框。

原代码错误点
  • 格式理解错误:坐标列表最后一个点是左下角,不是右下角,取首尾两点无法得到正确的矩形对角
  • 坐标取值笔误:原代码里右下角的y坐标错误取了第四个点的x值(result[0][0][-1][0]),坐标值完全不匹配
  • 逻辑缺失:仅尝试绘制第一个文本块的框,没有遍历所有检测结果
正确绘框实现

提供两种常用实现,第二种和官方draw_ocr效果完全一致,支持倾斜文本场景。

方法1:轴对齐矩形绘框(仅适合水平无倾斜文本)

从四个顶点中提取x、y的最大最小值,得到外接矩形的对角点再绘框:

import cv2
import matplotlib.pyplot as plt

img_draw = img.copy()
# 遍历所有检测到的文本块
for text_block in result:
    points = text_block[0]
    # 提取所有点的x、y坐标
    x_list = [int(p[0]) for p in points]
    y_list = [int(p[1]) for p in points]
    x1, x2 = min(x_list), max(x_list)
    y1, y2 = min(y_list), max(y_list)
    # 绘绿色边框,线宽2,如需填充把最后一个参数改为-1
    cv2.rectangle(img_draw, (x1, y1), (x2, y2), (0, 255, 0), 2)

# OpenCV默认BGR格式,展示时转RGB
plt.imshow(cv2.cvtColor(img_draw, cv2.COLOR_BGR2RGB))
plt.show()

方法2:多边形绘框(适配所有场景,和官方效果一致)

直接用四个顶点画闭合多边形,完美支持倾斜、旋转文本的框选:

import cv2
import numpy as np
import matplotlib.pyplot as plt

img_draw = img.copy()
for text_block in result:
    points = np.array(text_block[0], dtype=np.int32).reshape((-1, 1, 2))
    # 画闭合多边形边框
    cv2.polylines(img_draw, [points], isClosed=True, color=(0, 255, 0), thickness=2)

plt.imshow(cv2.cvtColor(img_draw, cv2.COLOR_BGR2RGB))
plt.show()
参考素材

测试原图:
测试原图
官方draw_ocr输出的正确效果:
官方绘框参考效果

内容的提问来源于stack exchange,提问作者Ahmad Anis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:03:23