在OpenCV C++中绘制旋转矩形

16

我想在OpenCV中用C++绘制一个旋转的矩形。我使用以下方式使用"rectangle"函数:

cv::RotatedRect rect = cv::RotatedRect(center, size, angle);
cv::Point2f vertices[4];
rect.points(vertices);
for (int i = 0; i < 4; i++)
    line(img, vertices[i], vertices[(i+1)%4], color, thickness);
rectangle(RGBsrc, vertices[0], vertices[2], Scalar(0, 0, 0),  CV_FILLED, 8, 0);

但是这个函数绘制的是一个角度为0的矩形。我该如何在OpenCV中用C++绘制特定角度的旋转矩形?


1
您需要在旋转矩形的4个角之间绘制4条单独的线。 - sgarizvi
或许此页面可以帮助。 - Jeru Luke
2个回答

15

如果您想要一个填充的矩形,您应该使用fillConvexPoly

// Include center point of your rectangle, size of your rectangle and the degrees of rotation  
void DrawRotatedRectangle(cv::Mat& image, cv::Point centerPoint, cv::Size rectangleSize, double rotationDegrees)
{
    cv::Scalar color = cv::Scalar(255.0, 255.0, 255.0); // white

    // Create the rotated rectangle
    cv::RotatedRect rotatedRectangle(centerPoint, rectangleSize, rotationDegrees);

    // We take the edges that OpenCV calculated for us
    cv::Point2f vertices2f[4];
    rotatedRectangle.points(vertices2f);

    // Convert them so we can use them in a fillConvexPoly
    cv::Point vertices[4];    
    for(int i = 0; i < 4; ++i){
        vertices[i] = vertices2f[i];
    }

    // Now we can fill the rotated rectangle with our specified color
    cv::fillConvexPoly(image,
                       vertices,
                       4,
                       color);
}

1
你会用Python怎么写这个? - raaj

11
下面的示例演示了如何在OpenCV C++中绘制旋转矩形。
Mat test_image(200, 200, CV_8UC3, Scalar(0));
RotatedRect rRect = RotatedRect(Point2f(100,100), Size2f(100,50), 30);
Point2f vertices[4];
rRect.points(vertices);
for (int i = 0; i < 4; i++)
    line(test_image, vertices[i], vertices[(i+1)%4], Scalar(0,255,0), 2);
Rect brect = rRect.boundingRect();
rectangle(test_image, brect, Scalar(255,0,0), 2);
imshow("rectangles", test_image);
waitKey(0);
结果是:
enter image description here
参考资料:
OpenCV文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接