Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 41027

How to do Delaunay Triangulation and return an adjacency matrix?

$
0
0
I am trying to do Delaunay Triangulation for a set of points in OpenCV, but encountered a problem. The function takes a matrix of coordinates and return an adjacency matrix. (If there is and edge connecting the point i and the point j, then adj(i,j) = 1, otherwise 0.) I didn't get it working. The code below give strange results. Could you please help? An example of Delaunay Triangulation is given [here][1]. Thank you in advance. #include #include #include #include using namespace std; using namespace cv; Mat delaunay(const Mat& points, int imRows, int imCols) /// Return the Delaunay triangulation, under the form of an adjacency matrix /// points is a Nx2 mat containing the coordinates (x, y) of the points { Mat adj(points.rows, points.rows, CV_32S, Scalar(0)); /// Create subdiv and insert the points to it Subdiv2D subdiv(Rect(0,0,imCols,imRows)); for(int p = 0; p < points.rows; p++) { float xp = points.at(p, 0); float yp = points.at(p, 1); Point2f fp(xp, yp); subdiv.insert(fp); } /// Get the number of edges vector edgeList; subdiv.getEdgeList(edgeList); int nE = edgeList.size(); /// Check adjacency for(int e = 1; e <= nE; e++) { int p = subdiv.edgeOrg(e); // Edge's origin int q = subdiv.edgeDst(e); // Edge's destination if(p < points.rows && q < points.rows) adj.at(p, q) = 1; // else // { // cout<

(i,0); int yi = points.at(i,1); /// Draw the edges for(int j = i+1; j < points.rows; j++) { if(adj.at(i,j) > 0) { int xj = points.at(j,0); int yj = points.at(j,1); line(im, Point(xi,yi), Point(xj,yj), Scalar(255,0,0), 1); } /// Draw the nodes circle(im, Point(xi, yi), 1, Scalar(0,0,255), -1); } } namedWindow("im", CV_WINDOW_NORMAL); imshow("im",im); waitKey(); return 0; } [1]: https://github.com/Itseez/opencv/blob/03e74330fa95306407f521beecdc3ae059f0cf1c/samples/cpp/delaunay2.cpp


Viewing all articles
Browse latest Browse all 41027

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>