Ich habe eine Delaunay Triangulation mit OpenCV dank dieses Codes: example code (in partiluclar draw_subdiv). Wenn ich jedoch die Triangulation anzeigen möchte, erhalte ich das Netz und die Linien, die nicht zur Triangulation gehören. Diese Linien sind darauf zurückzuführen, dass der Triangulationsalgorithmus seine Arbeit beginnt, wenn er Dreiecke betrachtet, die auf "unendlich" stehen.Delaunay Triangulation OpenCV C++
Können Sie mir erklären, wie man bitte nur das Netz in die konvexe Hülle (ohne diese Linien) zeichnet?
Anzeigefunktion:
void draw_subdiv(Mat &img, Subdiv2D& subdiv, Scalar delaunay_color)
{
vector<Vec6f> triangleList;
subdiv.getTriangleList(triangleList);
vector<Point> pt(3);
for(size_t i = 0; i < triangleList.size(); ++i)
{
Vec6f t = triangleList[i];
pt[0] = Point(cvRound(t[0]), cvRound(t[1]));
pt[1] = Point(cvRound(t[2]), cvRound(t[3]));
pt[2] = Point(cvRound(t[4]), cvRound(t[5]));
line(img, pt[0], pt[1], delaunay_color, 1);
line(img, pt[1], pt[2], delaunay_color, 1);
line(img, pt[2], pt[0], delaunay_color, 1);
}
}
Hauptfunktion:
Mat image = imread(argv[1], 1);
..... ....
//creat delaunay
Scalar delaunay_color(255, 255, 255), point_color(0,0,255);
Rect rect(0,0,image.cols, image.rows);
Subdiv2D subdiv(rect);
for(int i = 0; i < point.getDim(); ++i)
{
Point2f fp(point.getCoord()[i].real(), point.getCoord()[i].imag());
subdiv.insert(fp);
}
draw_subdiv(image, subdiv, delaunay_color);
imwrite("data/delaunay.jpg", image);
Ergebnis:
Posten Sie Ihre Display-Funktion, pls. – Solkar