我们是图像上的一组点。我想在两个特定点之间的线段周围提取一个旋转的矩形。
示例:
如果我们拥有的唯一数据是这些点的坐标,我想收到点p1和p2的以下图像:
以下针对p1和p3:
只要区域在线周围,图像的方向就不重要了。
我尝试过使用以下代码:
#define radiansToDegrees(angleRadians) ((angleRadians) * 180.0 / CV_PI)
//...
// Calculate the angle and center of rotated rect
float angle = radiansToDegrees(atan2(p1.y - p3.y, p1.x - p3.x));
Point2f center = (p1 + p3) / 2;
Size2f size(distanceBtwPoints(quad.p1, p3),80);
RotatedRect rect(center,size,angle);
Mat M, rotated, cropped;
Size rect_size = rect.size;
M = getRotationMatrix2D(rect.center, angle, 1.0);
// perform the affine transformation
warpAffine(cln, rotated, M, cln.size(), INTER_CUBIC);
// crop the resulting image
getRectSubPix(rotated, rect_size, rect.center, cropped);
正确计算两点之间的角度(虽然它取决于点的方向,例如可以是270或-90),两点之间的距离是正确的。我认为问题在于进一步进行角度计算,以正确地扭曲图像。
提前致谢!