La triangulation de Delaunay opencv c++
J'ai fait une triangulation de delaunay avec openCv grâce à ce code :
exemple de code
(en partiluclar draw_subdiv).
Cependant, lorsque je veux afficher la triangulation, j'ai le maillage et les lignes qui n'appartiennent pas à la triangulation.Ces lignes sont dues au fait que l'algorithme de triangulation commence son travail compte tenu de triangles affichés à "l'infini".
Pouvez-vous m'expliquer comment dessiner le maillage dans l'enveloppe convexe s'il vous plaît (sans ces lignes) ?
fonction d'affichage :
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);
}
}
fonction principale :
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);
Résultat:
poste votre fonction d'affichage, pls.
OriginalL'auteur axel | 2013-05-17
Vous devez vous connecter pour publier un commentaire.
Eh bien, je pense que c'est facile. Simplement détecter lorsque les points sont hors de l'image et de ne pas les attirer.
Dans votre fonction d'affichage de l'écriture:
OriginalL'auteur Ander Biguri