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三角网算法例子的更多相关文章
- OpenCV学习(22) opencv中使用kmeans算法
kmeans算法的原理参考:http://www.cnblogs.com/mikewolf2002/p/3368118.html 下面学习一下opencv中kmeans函数的使用. 首先我们 ...
- OpenCV中的SURF算法介绍
SURF:speed up robust feature,翻译为快速鲁棒特征.首先就其中涉及到的特征点和描述符做一些简单的介绍: 特征点和描述符 特征点分为两类:狭义特征点和广义特征点.狭义特征点的位 ...
- OpenCV学习(35) OpenCV中的PCA算法
PCA算法的基本原理可以参考:http://www.cnblogs.com/mikewolf2002/p/3429711.html 对一副宽p.高q的二维灰度图,要完整表示该图像,需要m = ...
- openCV中直方图均衡化算法的理解
直方图均衡化就是调整灰度直方图的分布,即将原图中的灰度值映射为一个新的值.映射的结果直观表现是灰度图的分布变得均匀,从0到255都有分布,不像原图那样集中.图像上的表现就是对比度变大,亮的更亮,暗的更 ...
- Opencv中K均值算法(K-Means)及其在图像分割中的应用
K均值(K-Means)算法是一种无监督的聚类学习算法,他尝试找到样本数据的自然类别,分类是K由用户自己定义,K均值在不需要任何其他先验知识的情况下,依据算法的迭代规则,把样本划分为K类.K均值是最常 ...
- c++opencv中线条细化算法
要达到的效果就是将线条尽量细化成单像素,按照论文上的Hilditch算法试了一下,发现效果不好,于是自己尝试着写了一下细化的算法,基本原理就是从上下左右四个方向向内收缩. 1.先是根据图片中的原则确定 ...
- 图像处理之 opencv 学习---opencv 中的常用算法
http://blog.csdn.net/lindazhou2005/article/details/1534234 文中有提到鲁棒性 http://blog.csdn.net/chary8088/a ...
- OpenCV中Camshitf算法学习
今天上午,结合OpenCV自带的camshitf例程,简单的对camshitf有了一个大致的认识和理解,现总结如下: 1:关于HSV H指hue(色相).S指saturation(饱和度).V指val ...
- opencv3中的机器学习算法之:EM算法
不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注.相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计.也能得到每个样本对应的标注值,类似于kmea ...
随机推荐
- 准备开始自己搞企业管理软件,从openerp入手
公司运行了半年多,人还比较少,只用了一些即时通讯工具,还有svn等基本的工具 记账用的是gnucash 其他的管理急需相应的软件,找了很长时间也没有合适的 想了想,还是从开源的openerp odoo ...
- Objective-c——UI基础开发第八天(QQ聊天界面)
一.知识点: QQ聊天界面 双模型的使用(dataModel和frameModel) UITextField的使用 通知的使用 拉伸图片的两种方法(slicing/image对象的resizeable ...
- 数据库实验一 SQL Service的安装
SQL 2014 安装需要 Microsoft .Net Framework 3.5框架 win 8.1 Microsoft .Net Framework 3.5框架安装教程:点我 安装图文教程:点我 ...
- 不小心误删@‘local’操作恢复
今天在测试用户权限的时候不小心把User: ''@'localhost';用户删除了 导致任何用户登录都无权限操作 恢复过程 停止mysql服务:在mysql安装目录下找到my.ini(linux下是 ...
- hiho一下116周 网络流
网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? ...
- N皇后回溯解法 leetcode N-Queens
class Solution { public: vector<vector<string> > solveNQueens(int n) { vector<vector& ...
- Unity Shader _Time
_Time是个4维向量,跟Unity3D中的deltaTime(这是个一维的,数值)不同. float4 _Time : Time (t/20, t, t*2, t*3), use to animat ...
- c语言学习笔记
为什么需要输出控制符: 1: 01组成的代码可以表示数据亦可以表示指令: 2:如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式输出就会有不同的输出结果.. %d --- ...
- webbrowser在不同的.netframework版本差异
这几在做一个浏览器的自动化下载的工具,发现自己做的demo和做的项目代码运行不一致,代码就那么几行,拷贝过去为什么有些行为就不一样呢?经过分析发现原来有.net4.0和.net2.0中的webbrow ...
- (object sender,EventArgs e)是什么?
object sender:发出事件的对象 EventArgs e:对象中的数据