您好,登录后才能下订单哦!
OpenCV 是一个功能强大的计算机视觉库,广泛应用于图像处理和计算机视觉任务。在 OpenCV 中,绘制形状和文字是常见的操作,可以用于标注图像、生成可视化效果或调试代码。本文将介绍如何使用 C++ 和 OpenCV 绘制各种形状和文字。
在开始之前,确保你已经安装了 OpenCV 库,并且配置好了开发环境。你可以通过以下命令安装 OpenCV:
sudo apt-get install libopencv-dev
接下来,创建一个新的 C++ 文件,并包含必要的头文件:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
在绘制形状和文字之前,我们需要创建一个空白图像。可以使用 Mat
类来创建一个指定大小和颜色的图像:
int main() {
// 创建一个 500x500 的空白图像,背景为白色
Mat image = Mat::zeros(500, 500, CV_8UC3);
image.setTo(Scalar(255, 255, 255));
// 在这里绘制形状和文字
// 显示图像
imshow("Image", image);
waitKey(0);
return 0;
}
OpenCV 提供了多种函数来绘制常见的几何形状,如直线、矩形、圆形等。
使用 line
函数可以在图像上绘制一条直线。该函数的参数包括图像、起点、终点、颜色和线宽。
// 绘制一条从 (50, 50) 到 (450, 450) 的红色直线,线宽为 2
line(image, Point(50, 50), Point(450, 450), Scalar(0, 0, 255), 2);
使用 rectangle
函数可以在图像上绘制一个矩形。该函数的参数包括图像、左上角点、右下角点、颜色和线宽。
// 绘制一个从 (100, 100) 到 (400, 400) 的绿色矩形,线宽为 3
rectangle(image, Point(100, 100), Point(400, 400), Scalar(0, 255, 0), 3);
使用 circle
函数可以在图像上绘制一个圆形。该函数的参数包括图像、圆心、半径、颜色和线宽。
// 绘制一个圆心在 (250, 250),半径为 100 的蓝色圆形,线宽为 4
circle(image, Point(250, 250), 100, Scalar(255, 0, 0), 4);
使用 ellipse
函数可以在图像上绘制一个椭圆。该函数的参数包括图像、中心点、轴长、旋转角度、起始角度、结束角度、颜色和线宽。
// 绘制一个中心在 (250, 250),长轴 200,短轴 100,旋转角度 45 的黄色椭圆
ellipse(image, Point(250, 250), Size(200, 100), 45, 0, 360, Scalar(0, 255, 255), 2);
使用 polylines
函数可以在图像上绘制一个多边形。该函数的参数包括图像、顶点数组、是否闭合、颜色和线宽。
// 定义一个多边形的顶点
vector<Point> points;
points.push_back(Point(100, 100));
points.push_back(Point(200, 50));
points.push_back(Point(300, 100));
points.push_back(Point(250, 200));
points.push_back(Point(150, 200));
// 绘制一个闭合的紫色多边形
polylines(image, points, true, Scalar(255, 0, 255), 2);
在图像上绘制文字可以使用 putText
函数。该函数的参数包括图像、文字内容、起始位置、字体、字体大小、颜色、线宽和线型。
// 在图像上绘制 "Hello, OpenCV!",字体为 FONT_HERSHEY_SIMPLEX,大小为 1.5,颜色为黑色
putText(image, "Hello, OpenCV!", Point(50, 450), FONT_HERSHEY_SIMPLEX, 1.5, Scalar(0, 0, 0), 2);
以下是一个完整的示例代码,展示了如何在图像上绘制各种形状和文字:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
// 创建一个 500x500 的空白图像,背景为白色
Mat image = Mat::zeros(500, 500, CV_8UC3);
image.setTo(Scalar(255, 255, 255));
// 绘制一条从 (50, 50) 到 (450, 450) 的红色直线,线宽为 2
line(image, Point(50, 50), Point(450, 450), Scalar(0, 0, 255), 2);
// 绘制一个从 (100, 100) 到 (400, 400) 的绿色矩形,线宽为 3
rectangle(image, Point(100, 100), Point(400, 400), Scalar(0, 255, 0), 3);
// 绘制一个圆心在 (250, 250),半径为 100 的蓝色圆形,线宽为 4
circle(image, Point(250, 250), 100, Scalar(255, 0, 0), 4);
// 绘制一个中心在 (250, 250),长轴 200,短轴 100,旋转角度 45 的黄色椭圆
ellipse(image, Point(250, 250), Size(200, 100), 45, 0, 360, Scalar(0, 255, 255), 2);
// 定义一个多边形的顶点
vector<Point> points;
points.push_back(Point(100, 100));
points.push_back(Point(200, 50));
points.push_back(Point(300, 100));
points.push_back(Point(250, 200));
points.push_back(Point(150, 200));
// 绘制一个闭合的紫色多边形
polylines(image, points, true, Scalar(255, 0, 255), 2);
// 在图像上绘制 "Hello, OpenCV!",字体为 FONT_HERSHEY_SIMPLEX,大小为 1.5,颜色为黑色
putText(image, "Hello, OpenCV!", Point(50, 450), FONT_HERSHEY_SIMPLEX, 1.5, Scalar(0, 0, 0), 2);
// 显示图像
imshow("Image", image);
waitKey(0);
return 0;
}
本文介绍了如何使用 C++ 和 OpenCV 绘制各种形状和文字。通过这些基本的绘图函数,你可以在图像上添加标注、生成可视化效果或进行调试。OpenCV 提供了丰富的绘图功能,可以满足大多数图像处理任务的需求。希望本文对你有所帮助,祝你在 OpenCV 的学习和开发中取得更多进展!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。