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

如何转换Azure Document Intelligence坐标并绘制区域边界框?

解决Azure Document Intelligence坐标转CV2像素坐标的问题

核心逻辑

Azure返回的坐标单位是英寸,以页面左上角为原点;而CV2使用像素坐标,同样以图像左上角为原点。只需通过页面英寸尺寸和图像像素尺寸计算缩放比例,就能把英寸坐标转成CV2可用的像素坐标。

具体步骤

  1. 获取页面尺寸(英寸):从Azure Document Intelligence的分析结果中,提取对应页面的width和height字段(这两个值就是页面的宽高,单位为英寸)。
  2. 获取图像像素尺寸:用CV2加载图像后,通过img.shape[:2]得到图像的像素高度和宽度(注意顺序是(高度, 宽度))。
  3. 计算缩放因子:
    • X轴缩放因子 = 图像像素宽度 / 页面英寸宽度
    • Y轴缩放因子 = 图像像素高度 / 页面英寸高度
  4. 转换多边形坐标:将原始英寸坐标的每个(x,y)点分别乘以对应缩放因子,转成整数像素值,再整理成CV2要求的格式。

代码示例

import cv2
import numpy as np

# 1. 加载图像
img = cv2.imread("your_document_image.jpg")
img_height_px, img_width_px = img.shape[:2]

# 2. 从Azure分析结果中获取页面英寸尺寸(示例为A4纸尺寸,实际请用返回值)
page_width_in = 8.5
page_height_in = 11

# 3. 计算缩放因子
scale_x = img_width_px / page_width_in
scale_y = img_height_px / page_height_in

# 4. 原始Azure多边形坐标(英寸)
azure_polygon = [2.5735, 4.6218, 2.6712, 4.6218, 2.6712, 4.7218, 2.5735, 4.7218]
# 拆分为(x,y)坐标对
points_in = [(azure_polygon[i], azure_polygon[i+1]) for i in range(0, len(azure_polygon), 2)]
# 转换为像素坐标
points_px = [(int(x * scale_x), int(y * scale_y)) for x, y in points_in]
# 转为CV2需要的数组格式
cv2_polygon = np.array(points_px, np.int32).reshape((-1, 1, 2))

# 5. 绘制多边形并展示
cv2.polylines(img, [cv2_polygon], isClosed=True, color=(0, 255, 0), thickness=2)
cv2.imshow("Annotated Document", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意事项

  • 确保用于CV2的图像和Azure分析的是同一份原始文档,避免因裁剪、缩放导致比例错误。
  • 不要手动估算页面尺寸,优先用Azure返回的pages[0].width和pages[0].height,保证精度。
  • Azure和CV2的坐标原点均为左上角,无需翻转Y轴。

内容的提问来源于stack exchange,提问作者Droid-Bird

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:37:20