首页 > 代码库 > OpenCV中Delaunay三角网算法例子
OpenCV中Delaunay三角网算法例子
#include <opencv2/opencv.hpp>#include <vector>using namespace cv;using namespace std;typedef struct _TRIANGLE_DESC_{ Point pt1, pt2, pt3; _TRIANGLE_DESC_(const Point _pt1, const Point _pt2, const Point _pt3): pt1(_pt1), pt2(_pt2), pt3(_pt3){}}TRIANGLE_DESC;vector<TRIANGLE_DESC> delaunayAlgorithm(const Rect boundRc,const vector<Point>& points){ if (points.empty()) { return vector<TRIANGLE_DESC>(); } vector<TRIANGLE_DESC> result; vector<Vec6f> _temp_result; Subdiv2D subdiv2d(boundRc); for (const auto point : points) { subdiv2d.insert(Point2f((float)point.x, (float)point.y)); } subdiv2d.getTriangleList(_temp_result); for (const auto _tmp_vec : _temp_result) { Point pt1((int)_tmp_vec[0], (int)_tmp_vec[1]); Point pt2((int)_tmp_vec[2], (int)_tmp_vec[3]); Point pt3((int)_tmp_vec[4], (int)_tmp_vec[5]); result.push_back(TRIANGLE_DESC(pt1, pt2, pt3)); } return result;}int main(int argc, char* argv[]){ const int width = 400; const int height = 400; Mat srcImg(height, width, CV_8UC3, Scalar(255,255,255)); const vector<Point> testPoints = { Point(23, 45), Point(243, 145), Point(308, 25), Point(180, 230), Point(343, 145), Point(108, 25) }; for (const auto point : testPoints) { circle(srcImg, point, 1, Scalar(0), 2); } // const Rect pageRc(0, 0, width, height); const auto triangles = delaunayAlgorithm(pageRc,testPoints); for (const auto triangle : triangles) { line(srcImg, triangle.pt1, triangle.pt2, Scalar(255, 0, 0)); line(srcImg, triangle.pt1, triangle.pt3, Scalar(255, 0, 0)); line(srcImg, triangle.pt2, triangle.pt3, Scalar(255, 0, 0)); } imshow("src", srcImg); waitKey(0); return 0;}
OpenCV中Delaunay三角网算法例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。