目录
注:OpenCV中RGB排列是按照BGR排的(即相反顺序 )
一、绘制直线
1、函数line()
line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0);
line(img, Point(0, 0), Point(200, 200), Scalar(0, 0, 255), 2);
// 图像 起点 终点 颜色(红) 线粗细
参数:
img: 要绘制线段的图像。
pt1: 线段的起点。
pt2: 线段的终点。
color: 线段的颜色,通过一个Scalar对象定义。
thickness: 线条的宽度。
lineType: 线段的类型。可以取值8, 4, 和CV_AA, 分别代表8邻接连接线,4邻接连接线和反锯齿连接线。默认值为8邻接。为了获得更好地效果可以选用CV_AA(采用了高斯滤波)。
shift: 坐标点小数点位数。
2、代码
//绘制直线
void DrawLine()
{
line(img, Point(0, 0), Point(200, 200), Scalar(0, 0, 255), 2);
// 图像 起点 终点 颜色(红R) 线粗细
}
3、效果
二、绘制矩形
1、函数rectangle()
两种调用方式:
1-1、左上角顶点+右下角顶点
//方式1:左上角顶点+右下角顶点
rectangle(img, Point(100, 100), Point(400, 400), Scalar(255, 0, 0), 2, 8);
// 图像 左上角顶点 右下角顶点 颜色(蓝B) 宽度 线型(默认8)
1-2、矩形位置和长宽
//方式2:矩形位置和长宽
rectangle(img, Rect(200, 200, 300, 300), Scalar(255, 255, 0), 2, 8);
// 矩形位置和长宽 (蓝绿)
2、代码
//绘制矩形
void DrawRectangle()
{
//方式1:左上角顶点+右下角顶点
rectangle(img, Point(100, 100), Point(400, 400), Scalar(255, 0, 0), 2, 8);
// 图像 左上角顶点 右下角顶点 颜色(蓝B) 宽度 线型(默认8)
//方式2:矩形位置和长宽
rectangle(img, Rect(200, 200, 300, 300), Scalar(255, 255, 0), 2, 8);
// 矩形位置和长宽 (蓝绿)
}
3、效果
三、绘制椭圆
1、函数ellipse()
ellipse(img, Point(img.cols / 2, img.rows / 2), Size(img.cols / 4, img.rows / 2), 90,
// 圆心 (长, 宽) 偏转
0, 360, Scalar(255, 0, 255), 2, LINE_8);
//起始角度 终止角度 颜色(蓝红) 宽度 线条类型
详解:
参数:
img:图像。
center:椭圆圆心坐标。
axes:轴的长度(两个轴)。
angle:偏转的角度。
start_angle:圆弧起始角的角度。
end_angle:圆弧终结角的角度。
color:线条的颜色。
thickness:线条的粗细程度。
line_type:线条的类型。
shift:圆心坐标点和数轴的精度。
2、代码
//绘制椭圆
void DrawEllipse()
{
ellipse(img, Point(img.cols / 2, img.rows / 2), Size(img.cols / 4, img.rows / 2), 90, 0, 360, Scalar(255, 0, 255), 2, LINE_8);
//圆心 (长, 宽) 偏转角 起始角度 终止角度 颜色(蓝红) 宽度 线条类型
}
3、效果
四、绘制圆形
1、circle()函数
circle(img, Point(img.cols/2, img.rows/2), 200, Scalar(0, 255, 255), 2, 8);
// 图像 圆心坐标 半径 颜色 线条粗细 线条类型
2、代码
//绘制圆形
void DrawCircle()
{
circle(img, Point(img.cols/2, img.rows/2), 200, Scalar(0, 255, 255), 2, 8);
// 图像 圆心坐标 半径 颜色 线条粗细 线条类型
}
3、效果
五、添加文本
1、putText()函数
putText(img, "Hello OpenCV", Point(200, 200), FONT_HERSHEY_COMPLEX,
// 图像 文本 位置(左上角) 字体类型
2.0, Scalar(255, 0, 255), 1, 8);
//字体大小 字体颜色 线条粗细 线条类型
2、代码
//添加文本
void DrawText()
{
putText(img, "Hello OpenCV", Point(200, 200), FONT_HERSHEY_COMPLEX, 2.0, Scalar(255, 0, 255), 1, 8);
// 图像 文本 位置(左上角) 字体类型 字体大小 字体颜色 线条粗细 线条类型
}
3、效果
目录
总代码
//图形与文本绘制
//注:OpenCV中RGB排列是按照BGR排的,即相反顺序
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat img;
//图像初始化
void Image_Init()
{
img = Mat::zeros(Size(800, 600), 16); //创建一个黑白图像
if (img.empty() )
{
printf("图像加载失败");
exit(0);
}
}
//绘制直线
void DrawLine()
{
line(img, Point(0, 0), Point(200, 200), Scalar(0, 0, 255), 2);
// 图像 起点 终点 颜色(红R) 线粗细
}
//绘制矩形
void DrawRectangle()
{
//方式1:左上角顶点+右下角顶点
rectangle(img, Point(100, 100), Point(400, 400), Scalar(255, 0, 0), 2, 8);
// 图像 左上角顶点 右下角顶点 颜色(蓝B) 宽度 线型(默认8)
//方式2:矩形位置和长宽
rectangle(img, Rect(200, 200, 300, 300), Scalar(255, 255, 0), 2, 8);
// 矩形位置和长宽 (蓝绿)
}
//绘制椭圆
void DrawEllipse()
{
ellipse(img, Point(img.cols / 2, img.rows / 2), Size(img.cols / 4, img.rows / 2), 90, 0, 360, Scalar(255, 0, 255), 2, LINE_8);
//圆心 (长, 宽) 偏转角 起始角度 终止角度 颜色(蓝红) 宽度 线条类型
}
//绘制圆形
void DrawCircle()
{
circle(img, Point(img.cols/2, img.rows/2), 200, Scalar(0, 255, 255), 2, 8);
// 图像 圆心坐标 半径 颜色 线条粗细 线条类型
}
//添加文本
void DrawText()
{
putText(img, "Hello OpenCV", Point(200, 200), FONT_HERSHEY_COMPLEX, 2.0, Scalar(255, 0, 255), 1, 8);
// 图像 文本 位置(左上角) 字体类型 字体大小 字体颜色 线条粗细 线条类型
}
//显示图像
void Show()
{
imshow("画板", img);
}
int main()
{
Image_Init(); //图像初始化
//DrawLine(); //画直线
//DrawRectangle(); //画矩形
//DrawEllipse(); //画椭圆
//DrawCircle(); //画圆形
DrawText(); //绘制文本
Show(); //显示图像
waitKey(0);
return 0;
}
参考资料:
https://blog.csdn.net/weixin_41695564/article/details/79919474
https://blog.csdn.net/weixin_28949185/article/details/84839167