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

旋转图像OCR后,如何将检测矩形正确映射回原图像?

解决旋转ROI后OCR检测框还原到原图像的坐标问题

首先修正你代码里的语法错误:Rotate方法的参数括号写错了,正确写法是:

foundimg = foundimg.Rotate(90, new Gray(255), false);

你之前的坐标转换逻辑错误,核心问题是没有正确结合原ROI的尺寸和位置做逆旋转映射,导致检测框无法对应到原图像的正确位置。

正确的坐标转换逻辑

当你把原ROI(aroi)顺时针旋转90度得到回正的图像foundimg后,OCR得到的检测矩形是基于回正图像的坐标系。要将这些矩形映射回原图像,需要做逆旋转坐标转换,步骤如下:

  1. 先计算检测矩形在原ROI内部的坐标(逆旋转90度)
  2. 加上原ROI在原图像中的偏移量,得到最终在原图像中的矩形位置

具体转换公式:

  • 原ROI内的X坐标 = 回正图像中矩形的Y坐标
  • 原ROI内的Y坐标 = 原ROI的宽度 - 回正图像中矩形的X坐标 - 回正图像中矩形的宽度
  • 原ROI内的宽度 = 回正图像中矩形的高度
  • 原ROI内的高度 = 回正图像中矩形的宽度

修正后的绘制代码

foreach (Rectangle drawrect in charrect)
{
    // 计算检测矩形在原ROI内的坐标
    int roiX = drawrect.Y;
    int roiY = aroi.Width - drawrect.X - drawrect.Width;
    int roiWidth = drawrect.Height;
    int roiHeight = drawrect.Width;

    // 转换到原图像的坐标系
    Rectangle finalRect = new Rectangle(
        aroi.X + roiX,
        aroi.Y + roiY,
        roiWidth,
        roiHeight
    );

    CvInvoke.Rectangle(resultimg, finalRect, new MCvScalar(0, 252, 0), 1, LineType.EightConnected, 0);
}

错误原因说明

你之前的代码误用了foundimg.Width(旋转后图像的宽度,对应原ROI的高度)来计算Y坐标,而正确的应该使用原ROI的宽度(aroi.Width)。同时你错误地对Y坐标取负,忽略了原ROI在原图像中的Y轴偏移(aroi.Y),导致检测框位置完全偏离。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:55:57