为tesseract旋转图像后如何在原始图像上绘制矩形?

How to draw rectangle on original image after rotating image for tesseract?

我有一张带有 90 度角文本的图像,我正在使用 tesseract 和 c# 读取它。由于在 tesseract 中读取旋转文本的准确性较低,我正在围绕文本创建一个 ROI 并旋转 roi 以使图像的 ROI 部分笔直,然后使用 tesseract 读取它。

总而言之 - 有一个主图像,在我正在绘制的主图像内和文本周围的 ROI >> 然后我将 ROI 旋转 90 度以使其笔直 >> 然后我正在阅读文本 >> 然后我在每个字符周围绘制边界矩形。

但是我绘制的边界框就像是直图像而不是原始的 90 度 ROI。我需要在原始 ROI 上绘制边界框。我该怎么做?

外观如下:

这是我想要的样子:

这是我用来在每个字符周围绘制矩形的代码:

rotatedimg = mainimg.Clone();

for (int i = 0; i <roiincrement; i++)
{
    rotatedimg.ROI = ROIRect[i];
    rotatedimg.Rotate(90.0, new McvScalar(255,255,255); // rotating the image 0 deg to make it straight for tesseract to read

    ///....reading part of tesseract.
    var page = tesseract.Process(rotatedimg, PageSegMode.Auto)
    using (var iter = page.GetIterator()) //this parts draw the rect for each character
    {
        iter.Begin();
        Rect symbolBounds;
        do
        {
            if (iter.TryGetBoundingBox(PageIteratorLevel.Symbol, out symbolBounds))
            {                                       
                CvInvoke.cvRectangle(resultimg, new System.Drawing.Point(ROIRect[i].X + symbolBounds.X1, ROIRect[i].Y + symbolBounds.Y1), new System.Drawing.Point(ROIRect[i].X + symbolBounds.X2, ROIRect[i].Y + symbolBounds.Y2), new MCvScalar(0, 255, 0), 1, LINE_TYPE.FOUR_CONNECTED, 0);
            }
        } while (iter.Next(PageIteratorLevel.Symbol));
    }
}

好吧,我找不到这个问题的任何合理答案,所以我走了一条捷径。我只是在旋转图像以供 tesseract 读取之前获取图像的 ROI,然后找到轮廓并围绕这些轮廓绘制矩形。通过这样做,我得到了所需的边界框。它确实会增加几毫秒的处理时间,但不会太多。

这是我现在得到的结果: