Ubuntu系统VScode实现opencv(c++)几何图形的绘制

发布于:2025-08-03 ⋅ 阅读:(11) ⋅ 点赞:(0)

在 C++ 的 OpenCV 中进行几何图形绘制,主要依赖于 cv::linecv::rectanglecv::circlecv::ellipsecv::polylines 等函数。这些函数常用于图像标注、目标检测可视化、图形学习等任务。

下面是几何图形绘制的基本引入和说明:首先,需要创建画布,也可以直接在一张图片上画。

cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3);  // 创建一个黑色背景的图像(500×500)

 下面是图形函数及其参数的介绍:

1.直线

cv::line(img, cv::Point(50, 50), cv::Point(200, 50), cv::Scalar(255, 0, 0), 2);
参数名 类型 说明
img cv::Mat& 要绘制的图像(画布)
pt1 cv::Point 线段的起点坐标(如 cv::Point(x1, y1)
pt2 cv::Point 线段的终点坐标(如 cv::Point(x2, y2)
color cv::Scalar 线段的颜色(格式为 BGR,如红色为 cv::Scalar(0, 0, 255)
thickness int 线条宽度(默认为 1,设为 -1 无意义)
lineType int 线条类型(如下)
shift int 坐标小数位数(默认 0,一般不用动,除非你使用亚像素坐标)

 2.矩形

cv::rectangle(img, cv::Point(100, 100), cv::Point(300, 200), cv::Scalar(0, 255, 0), 3);
参数名 类型 说明
img cv::Mat& 要绘制的图像(画布)
pt1 cv::Point 矩形的左上角坐标(起点)
pt2 cv::Point 矩形的右下角坐标(终点)
color cv::Scalar 矩形边框颜色(BGR格式,例如红色为 cv::Scalar(0,0,255)
thickness int 线宽,默认为 1;设为 -1 表示填充矩形
lineType int 线型(cv::LINE_8cv::LINE_4cv::LINE_AA
shift int 坐标精度,小数点位数,默认 0

3.圆形

cv::circle(img, cv::Point(250, 250), 50, cv::Scalar(0, 0, 255), -1);  // 填充圆
参数名 类型 说明
img cv::Mat& 目标图像(画布)
center cv::Point 圆心坐标(如 cv::Point(x, y)
radius int 圆的半径(像素)
color cv::Scalar 圆的颜色(BGR 格式,如红色为 Scalar(0, 0, 255)
thickness int 线宽,默认 1;如果设为 -1,表示绘制实心圆
lineType int 线型,如 cv::LINE_8cv::LINE_AA(抗锯齿)
shift int 圆心坐标和半径的小数位数(用于亚像素绘图,默认 0)

4.椭圆

cv::ellipse(img, cv::Point(250, 250), cv::Size(100, 50), 45, 0, 360, cv::Scalar(255, 255, 0), 2);
参数名 类型 说明
img cv::Mat& 要绘制的图像(画布)
center cv::Point 椭圆中心点坐标
axes cv::Size 半轴长度,Size(a, b) 表示长轴为 2a,短轴为 2b
angle double 椭圆的旋转角度(绕中心逆时针,单位为度)
startAngle double 起始角度(相对于旋转后的 x 轴,单位为度)
endAngle double 结束角度
color cv::Scalar 颜色(BGR格式)
thickness int 线宽,默认为 1,设置为 -1 表示填充
lineType int 线型(cv::LINE_8, cv::LINE_AA 等)
shift int 坐标精度(默认 0,单位像素)

 绘制矩形,可以直接定义一个矩形,再设定其xy坐标,宽以及高,那么只需要将这个矩形给函数即可:

    Rect rect;
    rect.x = 200;
    rect.y = 100;
    rect.width = 300;
    rect.height = 300;
    rectangle(image,rect,Scalar(0,255,0),5,LINE_4);

rectangle函数中的5为线宽,该参数如果小于0,一般为-1,那么绘制的矩形为填充效果,大于0极为设置线宽。

 

 同样椭圆也是如此:

    RotatedRect rrt;
    rrt.center = Point(200,200);
    rrt.size = Size(200,300);
    rrt.angle = 90;
    ellipse(image,rrt,Scalar(200,0,0),4,LINE_4);

 剩下的图形可自己实现,当作练习;


网站公告

今日签到

点亮在社区的每一天
去签到