OpenCV:围绕线段提取RotatedRect

时间:2018-06-11 10:12:09

标签: c++ opencv

我们是图像上的一组点。我想在两个特定点之间的线段周围提取一个旋转的矩形。

示例:

enter image description here

如果我们拥有的唯一数据是这些点的坐标,我想收到点p1和p2的以下图像:

enter image description here

以下针对p1和p3:

enter image description here

只要区域在线周围,图像的方向就不重要了。

我尝试过使用以下代码:

#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),两点之间的距离是正确的。我认为问题在于进一步进行角度计算,以正确地扭曲图像。

提前致谢!

0 个答案:

没有答案