我如何对cv::rotatedRect
应用某些转换(例如旋转)?尝试使用cv::warpAffine
,但无法正常工作,因为它应该应用于cv::Mat
...
angle
、center
和 size
控制旋转、平移和缩放。请参阅文档了解更多信息。points()
获取顶点,并使用例如 cv::warpAffine
进行操作,但是这样做后您将不再拥有一个 cv::rotatedRect
(根据定义)。仿射
或透视
,则应处理旋转矩形
的点,结果可能是四边形而不是矩形。
cv::warpAffine
适用于图像。您应该使用cv :: Transform和cv :: Perspectivetransform
它们接受点数组并生成点数组。
示例:
cv::RotatedRect rect;
//fill rect somehow
cv::Point2f rect_corners[4];
rect.points(rect_corners);
std::vector<cv::Point2f> rect_corners_transformed(4);
cv::Mat M;
//fill M with affine transformation matrix
cv::transform(std::vector<cv::Point2f>(std::begin(rect_corners), std::end(rect_corners)), rect_corners_transformed, M);
// your transformed points are in rect_corners_transformed
TLDR: 创建一个新的矩形。
我不知道这是否会对你有所帮助,但我通过创建一个新的矩形并忽略旧的矩形来解决了类似的问题。换句话说,我计算了新角度,然后将其和旧矩形的值(中心点和大小)分配给了新矩形:
RotatedRect newRotatedRectangle(oldRectangle.center, oldRectangle.size, newAngle);