2017-08-31 10 views
2

私は、OpenCV 3.3上で一連の点を線として描きたい。私はvector<Point>でこのシーケンスを集めることができると思うが、これは最善のアイデアかどうかわからない。OpenCV3で一連の点を線で描く方法は?

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

そして、私は100×100ピクセルの画像として空のMatでそれらを描くのが好き: は、私はこれらの点ベクトルを持って考えることができます。それは画像の直径になります。私は検索して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;  
    } 
} 

答えて

2

あなたはこのようdrawContours(...)機能を使用することができます: `drawContours(:

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

私は通常、短いを行いますim、vector > {vec}、0、Scalar(255,255,255)、thickness、lineType); – Miki

+0

ありがとう! 私は1つの質問があります、なぜ輪郭を描くためにポイントのベクトルのベクトルを使用する必要がありますか?代わりにポイントベクトルを使用できないのはなぜですか? drawContours(im、vec、-1、Scalar(255,255,255)、thickness、lineType);という意味です。 – user145959

+0

関数はdrawContourではなくdrawContoursとして呼び出されています。単一の輪郭ではなく輪郭の集合を受け入れます。 – Pavel

関連する問題