从原始图像中的 ROI 进行坐标变换
Coordinate transform from ROI in original image
我在一些投影和几何方面遇到了一点问题。我有一张图像,我在其中检测到一个正方形。正方形检测后,我从图像中裁剪正方形。在 ROI 中,我检测到点 P(x,y)(见下图)。
我的问题是我知道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];
}
基本上就是向量加法的问题。取 M 的倒数,将其应用于 P(因此您将 P 旋转回原始框架),然后将 P 添加到矩形的左角。
可能有一种方法可以在您正在使用的 API 中执行此操作,而不是重新发明轮子。
我在一些投影和几何方面遇到了一点问题。我有一张图像,我在其中检测到一个正方形。正方形检测后,我从图像中裁剪正方形。在 ROI 中,我检测到点 P(x,y)(见下图)。
我的问题是我知道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];
}
基本上就是向量加法的问题。取 M 的倒数,将其应用于 P(因此您将 P 旋转回原始框架),然后将 P 添加到矩形的左角。
可能有一种方法可以在您正在使用的 API 中执行此操作,而不是重新发明轮子。