2017-08-31 5 views
2

Ich zeichne gerne eine Reihe von Punkten als Linie auf OpenCV 3.3. Ich denke, ich kann diese Sequenz von vector<Point> sammeln, obwohl ich nicht weiß, ob das die beste Idee ist oder nicht. Lets betrachten Ich habe diese Punkte Vektor:Wie zeichne ich eine Reihe von Punkten als Linie in OpenCV3?

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

Und Ich mag sie in einem leeren Mat als 100 * 100 Pixel-Bild zeichnen. So wäre es der Bilddurchmesser. Ich suchte und fand die line Funktion, aber es hat nur zu "Anfang und Ende" Punkte. Soll ich viele Zeilenfunktionen nacheinander verwenden? Es gibt keine bessere Lösung dafür?

Ich habe versucht, es zu tun, indem Sie diesen Code zu schreiben, aber es in einer Ausnahme ausgelöst:

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

Antwort

2

Sie drawContours(...) Funktion wie diese verwenden:

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

ich normalerweise die kürzeren: 'drawContours (im, Vektor > {vec}, 0, Skalar (255, 255, 255), Dicke, lineType); ' – Miki

+0

Danke Jungs! Ich habe eine Frage, warum sollten wir Vektor von Vektor von Punkten zum Zeichnen von Konturen verwenden? Warum können wir stattdessen nicht Vektorpunkte verwenden? Ich meine: drawContours (im, Vec, -1, Skalar (255, 255, 255), Dicke, lineType); – user145959

+0

Da die Funktion als drawContours aufgerufen wird, nicht drawContour. Es akzeptiert den Satz von Konturen, nicht einzelne Kontur. – Pavel

Verwandte Themen