如何使用c++和opencv根据中心点画矩形
时间: 2023-05-20 22:01:59 浏览: 354
您可以使用以下代码来使用C和OpenCV根据中心点画矩形:
```
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 创建一个黑色的图像
Mat image = Mat::zeros(400, 400, CV_8UC3);
// 定义矩形中心点和大小
Point center(200, 200);
Size size(100, 50);
// 计算矩形的左上角和右下角坐标
Point topLeft(center.x - size.width / 2, center.y - size.height / 2);
Point bottomRight(center.x + size.width / 2, center.y + size.height / 2);
// 画矩形
rectangle(image, topLeft, bottomRight, Scalar(0, 255, 0), 2);
// 显示图像
imshow("Image", image);
waitKey(0);
return 0;
}
```
这段代码将创建一个黑色的图像,然后根据给定的中心点和大小计算矩形的左上角和右下角坐标,并使用OpenCV的rectangle函数画出矩形。最后,它将显示图像并等待用户按下任意键。
相关问题
opencv c++ 画个旋转矩形
OpenCV (Open Source Computer Vision Library) 是一个广泛使用的计算机视觉和机器学习库,它提供了丰富的功能,包括图像处理、对象识别等。要在C++中使用OpenCV绘制旋转矩形,你需要使用`cv::RotatedRect`结构以及`cv::drawContours`函数。
以下是一个简单的示例,展示如何创建一个旋转矩形并将其绘制到OpenCV窗口上:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 创建一个随机的矩形中心点
cv::Point2f center(100, 100);
// 定义矩形的尺寸
float width = 200, height = 150;
// 定义旋转角度(这里以45度为例)
float angle = 45;
// 创建一个旋转矩形
cv::RotatedRect rotated_rect(center, cv::Size(width, height), angle);
// 创建一个空的灰度图像
cv::Mat img(600, 600, CV_8UC1, cv::Scalar(255));
// 使用蓝色绘制矩形
cv::Scalar color(255, 0, 0);
cv::drawContours(img, std::vector<cv::RotatedRect>{rotated_rect}, -1, color, 2, cv::LINE_AA);
// 显示图像
cv::imshow("Rotated Rectangle", img);
cv::waitKey();
return 0;
}
```
在这个例子中,我们首先定义了矩形的中心、尺寸和旋转角度,然后用这些参数创建了一个`cv::RotatedRect`对象。接着,我们使用`cv::drawContours`函数将这个旋转矩形绘制在图像上。最后,显示图像并等待用户按键。
opencv c++画旋转矩形
OpenCV(Open Source Computer Vision Library)是一个广泛使用的计算机视觉库,提供了一系列强大的图像处理和计算机视觉算法。如果你想在C++中使用OpenCV绘制旋转矩形,你需要用到`cv::RotatedRect`类以及相关的绘图函数。
以下是一个简单的示例,展示了如何创建一个旋转矩形并将其画在图片上:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
int main() {
// 创建一个蓝色的空白图片
cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3, cv::Scalar(255, 0, 0));
// 定义旋转矩形中心点、半径和旋转角度
cv::Point2f center(250, 250);
float angle = 45; // 逆时针旋转45度
float width = 150;
float height = width;
// 使用cv::getRotationMatrix2D和warpAffine计算旋转矩阵并应用
cv::Mat rotation_matrix = cv::getRotationMatrix2D(center, angle, 1);
cv::Mat rotated_img;
cv::warpAffine(img, rotated_img, rotation_matrix, img.size());
// 绘制原始矩形和旋转后的矩形
cv::rectangle(img, cv::Point(center.x - width/2, center.y - height/2),
cv::Point(center.x + width/2, center.y + height/2),
cv::Scalar(0, 255, 0), 2); // 原始绿色矩形
cv::rectangle(rotated_img, cv::Point(center.x - width/2, center.y - height/2),
cv::Point(center.x + width/2, center.y + height/2),
cv::Scalar(0, 0, 255), 2); // 旋转后红色矩形
// 显示原图和旋转后的图
cv::imshow("Original Rectangle", img);
cv::imshow("Rotated Rectangle", rotated_img);
// 等待用户按键,然后关闭所有窗口
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
```
在这个例子中,我们首先创建了一个蓝色的图片,然后定义了要旋转的矩形的位置、大小和旋转角度。接着计算旋转矩阵并应用到原始图片上,生成旋转后的图片。最后,我们在原图和旋转后的图上分别绘制了矩形,并显示出来。
阅读全文