2017-04-16 5 views
2

Ich habe eine Liste von Punkten, die die Eckpunkte eines Polygons sind, wie folgt aus:OpenCV: Wie erstellt man eine Maske in Form eines Polygons?

std::vector<cv::Point2d> polygonPoints; 

Ich brauche eine Maske für die goodFeaturesToTrack Funktion in OpenCV zu erstellen. Für ein Rechteck, der einfachste Weg, um den gewünschten Bereich mit 1 ‚s zu füllen ist wie folgt:

cv::Mat mask = cv::Mat::zeros(img.rows, img.cols, CV_8U); 
mask(boundingbox) = 1; 

Wie mache ich das mit einem Polygon, die 10+ Kanten hat? Gibt es eine äquivalente Lösung für n-seitige Polygone?

Antwort

3

Verwaltet, um eine Antwort zu finden, die funktioniert!

cv::Mat mask = cv::Mat::zeros(img->rows, img->cols, CV_8U); 
cv::Point pts[5] = { 
    cv::Point(1, 6), 
    cv::Point(2, 7), 
    cv::Point(3, 8), 
    cv::Point(4, 9), 
    cv::Point(5, 10) 
}; 
cv::fillConvexPoly(mask, pts, 5, cv::Scalar(1)); 
Verwandte Themen