我喜欢在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;
}
}
答案 0 :(得分:2)
您可以使用drawContours(...)
这样的功能:
vector<vector<Point>> contours = {vec};
drawContours(im, contours, -1, Scalar(255, 255, 255), thickness, lineType);