繁体   English   中英

OpenCV如何旋转cv :: RotatedRect?

[英]OpenCV How to rotate cv::RotatedRect?

如何将一些转换(例如旋转)应用于cv::rotatedRect 尝试使用cv::warpAffine但不起作用,因为它应该应用于cv :: Mat ...

您可以使用内部变量anglecentersize直接控制旋转平移和缩放,请参阅文档

更一般的转换需要使用points()来获取顶点并使用例如cv::warpAffine来操纵它们,但是一旦这样做,你将不再拥有cv::rotatedRect (根据定义)

如果您正在计划执行affineperspective等复杂操作,则应该处理rotated rect的点,结果可能是四边形而不是矩形。

cv :: warpAffine适用于图像。 你应该使用cv :: Transformcv :: 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM