[英]OpenCV How to rotate cv::RotatedRect?
如何将一些转换(例如旋转)应用于cv::rotatedRect
? 尝试使用cv::warpAffine
但不起作用,因为它应该应用于cv :: Mat ...
您可以使用内部变量angle
, center
和size
直接控制旋转平移和缩放,请参阅文档 。
更一般的转换需要使用points()
来获取顶点并使用例如cv::warpAffine
来操纵它们,但是一旦这样做,你将不再拥有cv::rotatedRect
(根据定义)
如果您正在计划执行affine
或perspective
等复杂操作,则应该处理rotated rect
的点,结果可能是四边形而不是矩形。
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.