3.4 图像上绘制几何图形(圆、直线、椭圆、多边形)
3.4图像上绘制几何图形#
基础#
point#
它表示由其图像坐标和指定的2D点。我们可以将其定义为:x,y
Point(x , y);
Scalar#
- 代表一个4元素的向量。Scalar类型广泛用于
OpenCV
中,用于传递像素值。 - 用它来表示
BGR
颜色值(3个参数)。如果不使用最后一个参数,则无需定义最后一个参数。 - 让我们看一个例子,如果我们被要求一个颜色参数,我们给出:
Scalar( a, b, c )
我们将定义一个BGR
颜色,如:Blue = a
,Green = b
和Red = c
3.4.1 圆形 绘制#
用法讲解:#
circle(所需绘制的的图像的名字 , Point(圆形坐标), 半径, 圆形的颜色(Scalar&color),宽度(负数为实心圆),边界类型,数据精确度 );
circle(img, Point(50, 50), 25, Scalar(255, 255, 255), -1); //绘制一个实心圆
绘制实心圆 具体代码:#
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = Mat::zeros(Size(512, 512), CV_8UC3); //生成一个黑色图像用于绘制几何图形
/******************** 2023-0110 绘制一个实心圆 ******************/
//绘制实心圆
circle(img, Point(50, 50), 25, Scalar(255, 255, 255), -1); //绘制一个实心圆
/*************************************************************************/
imshow(" ", img);
waitKey(0);
return 0;
}
绘制空心圆 具体代码:#
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = Mat::zeros(Size(512, 512), CV_8UC3); //生成一个黑色图像用于绘制几何图形
/******************** 2023-0110 绘制一个实心圆 **********************/
//绘制圆形
circle(img, Point(100, 50), 25, Scalar(255, 255, 255), 4); //绘制一个空心圆 (此圆的宽度为4)
/****************************************************************************/
imshow(" ", img);
waitKey(0);
return 0;
}
3.4.2 直线 绘制#
用法讲解#
line(所需绘制的的图像的名字 , Point(起点坐标),Point(终点坐标), 圆形的三通道颜色Scalar, 宽度(负数为实心圆),边界类型,数据精确度 );
ine(img, Point(100, 100), Point(200, 100), Scalar(255, 255, 255), LINE_4, 0); //绘制一条线
绘制直线 具体代码:#
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = Mat::zeros(Size(512, 512), CV_8UC3); //生成一个黑色图像用于绘制几何图形
/**************** 2023-0110 3.4 图像绘制几何图形 (直线) ************/
//绘制直线
line(img, Point(100, 100), Point(200, 100), Scalar(255, 255, 255), LINE_4, 0); //绘制一条线
/********************************************************************************/
imshow(" ", img);
waitKey(0);
return 0;
}
3.4.3 椭圆 绘制#
用法讲解:#
ellipse(图像的名字 , Point(椭圆中心坐标),Size(a, b), 旋转角度, 起始角度, 终止角度, 圆形的三通道颜色Scalar, 宽度(负数为实心圆),边界类型,数据精确度 );
ellipse(img, Point(300, 255), Size(100, 70), 0, 0 ,360, Scalar(255, 255, 255), -1); //绘制一个椭圆

绘制椭圆:#
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = Mat::zeros(Size(512, 512), CV_8UC3); //生成一个黑色图像用于绘制几何图形
/********************** 2023-0110 3.4 图像绘制几何图形 (椭圆) ********************/
//绘制椭圆
ellipse(img, Point(300, 255), Size(100, 70), 0, 0 ,360, Scalar(255, 255, 255), -1); //绘制一个椭圆
// ellipse(图像的名字 , Point(椭圆中心坐标),Size(a, b), 旋转角度, 起始角度, 终止角度, 圆形的三通道颜色Scalar, 宽度(负数为实心圆),边界类型,数据精确度 );
/*************************************************************************************************/
imshow(" ", img);
waitKey(0);
return 0;
}
3.4.4 多边形 绘制#
(1)矩形 绘制#
用法讲解:
rectangle(所需绘制的的图像的名字 , Point(顶点 1 的坐标), Point(顶点 2 的坐标),圆形的三通道颜色Scalar, 宽度(负数为实心圆),边界类型,数据精确度 );
rectangle(img, Point(50, 400), Point(100, 450), Scalar(255, 255, 255), -1); //绘制一个椭圆
绘制椭圆 具体代码:
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = Mat::zeros(Size(512, 512), CV_8UC3); //生成一个黑色图像用于绘制几何图形
/******************* 2023-0110 3.4 图像绘制几何图形 (矩形) ********************/
//绘制矩形
rectangle(img, Point(50, 400), Point(100, 450), Scalar(255, 255, 255), -1); //绘制一个椭圆
// rectangle(所需绘制的的图像的名字 , Point(顶点 1 的坐标), Point(顶点 2 的坐标),圆形的三通道颜色Scalar, 宽度(负数为实心圆),边界类型,数据精确度 );
/********************************************************************************************/
imshow(" ", img);
waitKey(0);
return 0;
}
(2)多边形绘制#
用法讲解:
fillPoly(img, 顶点坐标数组(pts), 多边形顶点数组中顶点的个数(npts), 绘制多边形的个数, Scalar(125, 125, 125),所有顶点的可选偏移量); //绘制3个多边形
fillPoly(img, pts, npts, 3, Scalar(125, 125, 125), 8); //绘制3个多边形
绘制多边形的具体代码:
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = Mat::zeros(Size(512, 512), CV_8UC3); //生成一个黑色图像用于绘制几何图形
//绘制多边形
Point pp[2][6]; //二维数组
pp[0][0] = Point(72,200);
pp[0][1] = Point(142,204);
pp[0][2] = Point(226,263);
pp[0][3] = Point(172,310);
pp[0][4] = Point(117,319);
pp[0][5] = Point(15,260);
pp[1][0] = Point(359,339);
pp[1][1] = Point(447,351);
pp[1][2] = Point(504,349);
pp[1][3] = Point(484,433);
pp[1][4] = Point(418,449);
pp[1][5] = Point(354,402);
Point pp2[5]; //一维数组
pp2[0] = Point(350,83);
pp2[1] = Point(463,90);
pp2[2] = Point(500,171);
pp2[3] = Point(421,194);
pp2[4] = Point(338,141);
const Point* pts[3] = { pp[0],pp[1], pp2 }; //pts变量的生成
int npts[] = { 6,6,5 }; //顶点个数数组的生成
fillPoly(img, pts, npts, 3, Scalar(125, 125, 125), 8); //绘制3个多边形
imshow(" ", img);
waitKey(0);
return 0;
}
3.4.5文字生成#
用法讲解:#
//putText(所需绘制的的图像的名字, "输出的文字内容", Point(文字左下角的像素坐标), 字符选择标志, 字符大小, Scalar(255, 255, 255),图像数据原点位置(默认为左上角);
putText(img, "Learn OpenCV 4", Point(100, 400), 2, 1, Scalar(255, 255, 255));
绘制文字:#
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = Mat::zeros(Size(512, 512), CV_8UC3); //生成一个黑色图像用于绘制几何图形
/******************** 2023-0110 3.4 图像绘制几何图形 (文字) *********************/
//文字生成
putText(img, "Learn OpenCV 4", Point(100, 400), 2, 1, Scalar(255, 255, 255));
//putText(所需绘制的的图像的名字, "输出的文字内容", Point(文字左下角的像素坐标), 字符选择标志, 字符大小, Scalar(255, 255, 255),图像数据原点位置(默认为左上角);
/************************************************************************************************/
imshow(" ", img);
waitKey(0);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步