【OpenCV + VS】绘制和填充多边形

内容分享2天前发布
0 0 0

在图像处理中,绘制多边形是常见的操作之一。多边形不仅是基础图形,而且在计算机视觉中经常用于表示轮廓、区域和目标检测等任务。在 OpenCV 中,我们可以使用多种方法来绘制和填充多边形,如
polylines

fillPoly

drawContours

【OpenCV + VS】绘制和填充多边形

1. OpenCV 中的多边形绘制方法

OpenCV 提供了多个函数来绘制多边形,常见的有:


polylines()
:绘制多边形的边界(折线)。


fillPoly()
:绘制并填充一个多边形。


drawContours()
:绘制轮廓线,也可以用来填充多边形。

2. 多边形绘制步骤

为了帮助大家更好地理解多边形的绘制,我们将通过一个简单的示例来演示如何创建一个多边形并进行绘制。我们将绘制一个五边形并将其填充为不同的颜色。

示例代码


#include <opencv2/opencv.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
void polyline_drawing_demo() {
    // 创建一个 512x512 的黑色图像
    Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);  
 
    // 定义五个点,构成一个五边形
    Point p1(100, 100);
    Point p2(350, 100);
    Point p3(450, 280);
    Point p4(320, 450);
    Point p5(80, 400);
 
    // 将点加入到点集 vector 中
    std::vector<Point>pts;
    pts.push_back(p1);
    pts.push_back(p2);
    pts.push_back(p3);
    pts.push_back(p4);
    pts.push_back(p5);
 
    // 将点集存入 contours(外部轮廓集合),以便调用 drawContours()
    std::vector<std::vector<Point>>contours;
    contours.push_back(pts);
 
    // 使用 drawContours 绘制多边形并填充(-1 表示填充所有轮廓)
    drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);  // 蓝色填充
 
    // 显示结果
    imshow("多边形绘制", canvas);
    waitKey(0);  // 等待用户按键后退出
    destroyAllWindows();  // 关闭窗口
}
 
int main() {
    polyline_drawing_demo();
    return 0;
}

3. 代码详解

创建图像

Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);

使用
Mat::zeros()
创建一个大小为 512×512 的黑色图像。
CV_8UC3
表示图像具有 3 个通道(BGR 色彩空间),每个通道的像素值为 8 位无符号整数。

定义五个点并创建多边形


Point p1(100, 100);
Point p2(350, 100);
Point p3(450, 280);
Point p4(320, 450);
Point p5(80, 400);

我们定义了五个点,分别是
(100, 100)

(350, 100)

(450, 280)

(320, 450)

(80, 400)
,这些点将构成一个五边形。

将这些点放入
vector


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

我们使用
std::vector<Point>
来存储这些点,OpenCV 提供了
std::vector
类型来处理点的集合。

绘制多边形


std::vector<std::vector<Point>> contours;
contours.push_back(pts);
drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);


drawContours()
用来绘制并填充轮廓。它接受以下参数:


canvas
:目标图像。


contours
:一个包含多边形轮廓的向量。


-1
:表示绘制所有轮廓(即所有多边形)。


Scalar(255, 0, 0)
:设置颜色为蓝色(BGR 格式)。


-1
:表示填充该轮廓。

显示图像

imshow("多边形绘制", canvas);


imshow()
用来显示图像。

4. 其他多边形绘制方法

4.1
polylines()
绘制折线(不填充)

polylines(canvas, pts, true, Scalar(0, 0, 255), 8, 8, 0);


polylines()
用来绘制多边形的边界,它的参数如下:


canvas
:目标图像。


pts
:点集,表示多边形的顶点。


true
:表示闭合图形,即连接最后一个点与第一个点。


Scalar(0, 0, 255)
:边框颜色,红色(BGR 格式)。


8
:线宽。


8
:线型(这里是默认值)。


0
:连接点类型(一般使用默认值即可)。

4.2
fillPoly()
填充多边形

fillPoly(canvas, pts, Scalar(255, 255, 0), LINE_AA, 0);


fillPoly()
用来绘制并填充多边形,填充颜色由
Scalar(255, 255, 0)
指定(黄色)。
LINE_AA
是抗锯齿线条,确保填充效果平滑。

5. 总结


polylines()
:绘制多边形的边界,不填充图形。


fillPoly()
:绘制并填充多边形,适合用来创建实心多边形。


drawContours()
:可以用来绘制和填充多个轮廓,适合处理复杂的多边形和区域。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...