用c++实现绘制rotatedRect
时间: 2023-11-20 08:07:00 浏览: 35
好的,以下是C语言中绘制RotatedRect的代码:
```
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("test.jpg");
RotatedRect rRect = RotatedRect(Point2f(150,150), Size2f(100,50), 30);
Point2f vertices[4];
rRect.points(vertices);
for (int i = 0; i < 4; i++)
line(image, vertices[i], vertices[(i+1)%4], Scalar(0,0,255), 2);
imshow("RotatedRect", image);
waitKey(0);
return 0;
}
```
这个程序会加载一张名叫test.jpg的图片,并在其中绘制一个旋转矩形RotatedRect。通过指定中心点、大小和旋转角度来创建RotatedRect对象,然后通过调用points方法获取矩形四个顶点,并使用line函数连接这些顶点来绘制矩形。最后通过imshow函数显示图片,并通过waitKey等待用户按下键盘。
相关问题
opencv RotatedRect用法 c++和qt
在C++中,使用OpenCV的RotatedRect可以按照以下步骤进行:
1. 导入OpenCV库头文件:
```c++
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
```
2. 创建RotatedRect对象:
```c++
cv::RotatedRect rect(cv::Point2f center, cv::Size2f size, float angle);
```
其中,center表示矩形的中心点,size表示矩形的宽度和高度,angle表示矩形的旋转角度。
3. 在图像上绘制RotatedRect:
```c++
cv::Mat image;
cv::rectangle(image, rect.boundingRect(), cv::Scalar(0, 255, 0), 2);
```
其中,boundingRect()函数可以返回包围RotatedRect的矩形,cv::Scalar(0, 255, 0)表示绘制矩形的颜色,2表示绘制矩形的线宽。
在Qt中,可以将OpenCV的Mat对象转换为Qt的QImage对象,然后在Qt中显示图像:
```c++
cv::Mat image;
// load image
QImage qimage(image.data, image.cols, image.rows, QImage::Format_RGB888);
QPixmap pixmap = QPixmap::fromImage(qimage);
ui->label->setPixmap(pixmap);
```
其中,QImage的构造函数可以接收指向图像数据的指针,图像的宽度和高度,以及图像的格式。然后使用QPixmap将QImage转换为可以在Qt中显示的图像。最后,将图像显示在Qt的标签控件上。
以上是使用OpenCV的RotatedRect的基本用法,可以根据具体需求进行调整和扩展。
怎么用cluster.direct = yaw;以及opencv c++库绘制旋转的框
要使用`cluster.direct = yaw`来表示聚类的旋转角度,其中`yaw`是一个表示旋转角度的变量。
然后,利用OpenCV C++库来绘制旋转后的框,需要进行以下步骤:
1. 定义一个旋转矩形对象:
```cpp
cv::RotatedRect rotatedRect;
```
2. 设置旋转矩形的中心点坐标和尺寸:
```cpp
rotatedRect.center = cv::Point2f(cluster.posX, cluster.posY); // 设置中心点坐标
rotatedRect.size = cv::Size2f(cluster.width, cluster.length); // 设置尺寸
```
3. 设置旋转矩形的旋转角度:
```cpp
rotatedRect.angle = -cluster.direct; // 设置旋转角度
```
这里需要注意的是,OpenCV中的旋转角度是逆时针方向的,而聚类的旋转角度可能是顺时针方向的,所以需要取负值。
4. 绘制旋转后的框:
```cpp
cv::Point2f vertices[4];
rotatedRect.points(vertices);
for (int i = 0; i < 4; i++) {
cv::line(showCloudImage, vertices[i], vertices[(i + 1) % 4], cv::Scalar(255, 0, 255), 1, 8, 0);
}
```
通过调用`rotatedRect.points(vertices)`可以获取旋转后框的四个顶点坐标,然后使用`cv::line`函数绘制框的四条边。
请根据实际情况修改代码中的变量和坐标系转换,以及在适当位置添加代码。