如何在 OpenCV3 中将一系列点画成一条线?

How to draw a sequence of points as a line in OpenCV3?

我喜欢在 OpenCV 3.3 上将一系列点画成一条线。我想我可以通过 vector<Point> 收集这个序列,尽管我不知道这是不是最好的主意。 让我们考虑一下我有这些点向量:

 vector<Point> vec = { Point(0,0),Point(10,10),Point(20,20), Point(30,30), Point(40,40), Point(50,50) };

而且我喜欢将它们绘制在空的 Mat 中作为 100*100 像素的图像。所以这将是图像直径。我搜索并找到了 line 功能,但它只有 "starting and end" 点。我应该按顺序使用许多行函数吗?没有更好的解决方案吗?

我试图通过编写这段代码来做到这一点,但它抛出了一个异常:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

void MyLine(Mat img, Point start, Point end);
Mat im = Mat::zeros(100, 100, CV_8UC1);
Mat img = Mat::zeros(100, 100, CV_8UC1);
vector<Point> vec = { Point(0,0),Point(10,10),Point(20,20), Point(30,30), Point(40,40), Point(50,50) };

int main()
{
    Point start= Point(0, 0);
    Point end = Point(50, 50);

    MyLine(img, start, end);
    namedWindow("image", WINDOW_AUTOSIZE);
    imshow("image", im);
    waitKey(0);
    return 0;
}

void MyLine(Mat img, Point start, Point end)
{
    int thickness = 2;
    int lineType = 8;
    for (int i = 0; i < 7; i++)
    {
        line(img,
            vec[i],
            vec[i+1],
            Scalar(255, 255, 255),
            thickness,
            lineType);
        im += img;    
    }
}

您可以像这样使用 drawContours(...) 函数:

vector<vector<Point>> contours = {vec};
drawContours(im, contours, -1, Scalar(255, 255, 255), thickness, lineType);