Ubuntu系统VScode实现opencv(c++)多边形的绘制与填充

发布于:2025-08-04 ⋅ 阅读:(19) ⋅ 点赞:(0)

在使用 C++ 进行图形处理时,OpenCV(Open Source Computer Vision Library)是一个功能强大、用途广泛的开源计算机视觉与图像处理库。OpenCV 提供了丰富的图像绘制与操作函数,能够高效实现图像中的基本图形绘制任务,包括线段、圆形、多边形等的绘制与填充,非常适合进行多边形绘制与填充的实践和开发。

在 C++ 中引入 OpenCV 并实现多边形的绘制与填充,OpenCV 中的函数如 cv::polylines 用于绘制多边形轮廓,cv::fillPoly 用于填充多边形区域,这些函数简洁高效,能帮助开发者快速实现图形绘制功能。

以下是polylines函数及其参数的介绍:

void cv::polylines(
    cv::InputOutputArray image,
    const std::vector<std::vector<cv::Point>>& pts,
    bool isClosed,
    const cv::Scalar& color,
    int thickness = 1,
    int lineType = cv::LINE_8,
    int shift = 0
);
参数 类型 说明
image InputOutputArray 要绘制的目标图像。
pts std::vector<std::vector<cv::Point>> 每一组点表示一条折线(或一个多边形)。外层是多组线,内层是每组线的点序列。
isClosed bool 是否将折线首尾连接闭合,若为 true,则形成多边形边界。
color cv::Scalar 绘制的颜色(例如红色为 cv::Scalar(0,0,255))。
thickness int 线条的粗细(默认值为 1)。
lineType int 线型:LINE_8(8连通,默认),LINE_4,或 LINE_AA(抗锯齿)。
shift int 点坐标的小数位数精度,通常为 0(表示整数像素点)。

pts需要一个点集;

 以下是fillPoly函数及其参数的介绍:

void cv::fillPoly(
    cv::InputOutputArray image,
    const std::vector<std::vector<cv::Point>>& pts,
    const cv::Scalar& color,
    int lineType = cv::LINE_8,
    int shift = 0,
    cv::Point offset = cv::Point()
);
参数 类型 说明
image InputOutputArray 要绘制的图像(8位或浮点图像,单通道或三通道)。
pts std::vector<std::vector<cv::Point>> 每个内部 vector<cv::Point> 是一个多边形顶点序列;可以填充多个多边形。
color cv::Scalar 填充颜色,如红色为 cv::Scalar(0, 0, 255)
lineType int 边界线的类型,常用 LINE_8LINE_4 或抗锯齿 LINE_AA
shift int 点坐标的小数精度位数,0 表示整数像素坐标。
offset cv::Point 所有点偏移的量,默认无偏移。

 深度了解这两个函数后,就可以进行实际操作了:

void Demo::polygon_drawing_Demo()
{
    Mat background = Mat::zeros(Size(512,512),CV_8UC3);
    background = Scalar(200,100,70);
    Point p1(150,100);
    Point p2(350,100);
    Point p3(450,250);
    Point p4(350,400);
    Point p5(150,400);
    Point p6(50,250);

    vector<Point> pts;
    pts.push_back(p1);
    pts.push_back(p2);
    pts.push_back(p3);
    pts.push_back(p4);
    pts.push_back(p5);
    pts.push_back(p6);

    polylines(background,pts,true,Scalar(255,200,5),2,LINE_8);
    fillPoly(background,pts,Scalar(100,200,25));
    imshow("shape",background);

}


网站公告

今日签到

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