从原始图像中的ROI进行坐标变换

时间:2016-03-09 14:14:31

标签: c++ opencv math affinetransform

我对一些投影和几何有一点问题。我有一个图像,我检测到一个正方形。在方形检测之后,我从图像中裁剪出正方形。在ROI中,我检测到点P(x,y)(见下图)。

enter image description here

我的问题是我知道ROI中P点的坐标,A,B,C,D的坐标和ROI的旋转(RotatedRect :: angle)但是我想得到原始P的坐标图片。任何建议都可以提供帮助。

对于ROI裁剪我有这个代码

vector< RotatedRect > rect(squares.size());

for (int i=0;i<squares.size();i++) 
{
    rect[i] = minAreaRect(Mat(squares[i]));
    Mat M,rotated,cropped;
    float angle = rect[i].angle;
    Size rect_size = rect[i].size;

    if (rect[i].angle<-45)
    {
        angle += 90;
        swap(rect_size.width,rect_size.height);
    }

    M = getRotationMatrix2D(rect[i].center,angle,1.0);
    warpAffine(cameraFeed,rotated,M,cameraFeed.size(),INTER_CUBIC);
    getRectSubPix(rotated,rect_size,rect[i].center,cropped);
    cropped.copyTo(SatelliteClass[i].m_matROIcropped);
    SatelliteClass[i].m_vecRect = rect[i];
}

1 个答案:

答案 0 :(得分:1)

它基本上是矢量加法的问题。取M的倒数,将其应用于P(以便将P重新旋转回原始帧),然后将P添加到矩形的左角。

可能有一种方法可以在您使用的API中执行此操作,而不是重新发明轮子。