如何在OpenCV3中绘制一系列点作为一条线?

时间:2017-08-31 07:58:37

标签: drawing line opencv3.0

我喜欢在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函数,但它只有“开始和结束”点。我应该按顺序使用多个行功能吗?对此没有更好的解决方案吗?

我尝试通过编写此代码来实现,但它抛出异常:

#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;    
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用drawContours(...)这样的功能:

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