OpenCVSharp 分水岭算法
分水岭算法的原理大概就是在需要被区分的各个区域注入不同的颜色的水,这个水会染色它标志处的点,然后还会染色相邻的像素值差不多的点,不断漫延到像素值差异大的点停止。
public void Run(){Mat src = Cv2.ImRead("./Data/Image/lumu.jpg");Console.WriteLine("用鼠标 标记前景,然后按键盘任意键。");Cv2.ImShow("src", src);Cv2.SetMouseCallback("src", MyMouseCallback);Cv2.WaitKey();Mat imgMask = new Mat(src.Size(), MatType.CV_8U, Scalar.Black);imgMask.Rectangle(new Rect(1, 1, imgMask.Width - 2, imgMask.Height - 2), new Scalar(255));foreach (var pp in p){imgMask.Circle(pp, 3, new Scalar(1), -1);}Console.WriteLine("用鼠标 标记被分割的背景,然后按键盘任意键。");Cv2.ImShow("src", src);Cv2.SetMouseCallback("src", MyMouseCallbackbg);Cv2.WaitKey();foreach (var pp in p2){imgMask.Circle(pp, 3, new Scalar(200), -1);}imgMask.ConvertTo(imgMask, MatType.CV_32S);Cv2.Watershed(src, imgMask);Mat mask = new Mat();imgMask.ConvertTo(mask, MatType.CV_8U);mask = mask.Threshold(100, 255, ThresholdTypes.BinaryInv | ThresholdTypes.Otsu);Mat dst = Mat.Zeros(src.Height, src.Width, MatType.CV_8UC3);src.CopyTo( dst, mask);Cv2.ImShow("dst", dst);Cv2.WaitKey();}readonly List<Point> p = new List<Point>();readonly List<Point> p2 = new List<Point>();private void MyMouseCallback(MouseEventTypes e, int x, int y, MouseEventFlags f, IntPtr Data){if (e == MouseEventTypes.LButtonDown){Console.WriteLine(x + ":" + y);p.Add(new Point(x, y));}}private void MyMouseCallbackbg(MouseEventTypes e, int x, int y, MouseEventFlags f, IntPtr Data){if (e == MouseEventTypes.LButtonDown){Console.WriteLine(x + ":" + y);p2.Add(new Point(x, y));}}
OpenCVSharp 分水岭算法相关推荐
- 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(五)分水岭算法(watershed algorithm)
8.5 分水岭算法(watershed algorithm) 1.基于拓扑理论的数学形态学的分割方法. 2.基本思想:把图像看作测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局 ...
- OpenCV+python:分水岭算法
1,概念简介 现实中我们可以或者说可以想象有山有湖的景象,那么那一定是水绕 山,山围水的情形.当然在需要的时候,要人工构筑分水岭,以防集水盆之间的互相穿透.而区分高山(plateaus)与水的界线,以 ...
- Python OpenCV分水岭算法分割和提取重叠或有衔接的图像中的对象
本文将介绍如何使用分水岭算法对触摸和重叠的图像中的对象进行分割和提取. 参考:https://www.pyimagesearch.com/2015/11/02/watershed-opencv/ 分水 ...
- OpenCV(26)图像分割 -- 距离变换与分水岭算法(硬币检测、扑克牌检测、车道检测)
目录 一.基础理论 1.思想 2.原理 二.分水岭实战:硬币 步骤归纳 1.把原图像转二值图 2.开运算去噪 3.确定背景区域(膨胀)(得到背景/最大连通域) 4.确定前景区域(距离变换) (分离)( ...
- OpenCV 【四】————Watershed Algorithm(图像分割)——分水岭算法的原理及实现
分水岭算法实现(C++.opencv) 1.作用: 通常用于分割图像,主要实现以临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性 ...
- 什么是标记符控制的分水岭算法
本文首先指出传统分水岭算法的不足,然后介绍了标记符控制的分水岭算法,最后通过实例演示了该算法在图像分割中的应用.该微信图文由安晟提供.
- 图像轮廓、凸包、图像的矩、分水岭算法、图像修补
文章目录 1.查找并绘制轮廓 1.1 寻找轮廓:findContours() 函数 1.2 绘制轮廓:drawContours() 函数 1.3 示例程序:轮廓查找 1.4 综合示例:查找并绘制轮廓 ...
- OpenCV | 分水岭算法进行图像分割
分水岭算法进行图像分割 分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称 ...
- python图像分割算法_Opencv(二)—图像分割之分水岭算法!
做图像处理时,我们可能会遇到一个问题:我们只需要图片的一部分区域,如何把图片中的某部分区域提取出来 或者 图像想要的区域用某种颜色(与其它区域颜色不一致)标记起来 ,以上描述的问题在像处理领域称为 图 ...
最新文章
- mysql在线模拟器_力荐一款在线SQL模拟器
- SAP C/4HANA五朵云
- Swift 字典转数组
- 如何理解写文档这件事情 ?
- 谈谈StorageEvent
- ce5e.cn fadian.php,空包网 PHP mysql
- was这么做的负载均衡_中间件(WAS、WMQ)运维 9个常见难点解析
- wxWidgets:wxAuiNotebook类用法
- 程序员如何用Python了解女朋友的情绪变化?
- windows 弹shell_Windows系统常用免费软件“红黑榜”
- c语言乘号字母,c语言中如何输入间接运算符和乘号,包括如何转换
- ansys软件linux安装教程,ansys 15 for linux 安装纪录
- 整洁代码--写好注释
- 机器学习案例之_金融反欺诈预测
- 姓舒男孩名字简单大气
- iOS印象笔记添加到Siri捷径,怎么实现的?
- 图形学笔记(四) 数学变换
- 只需 2 张照片就能 2D 变 3D,这个 AI 能自己脑补蜡烛吹灭过程
- 【工作感悟】路自在前,冷暖自知
- 【829】【05参考工具书的使用】
热门文章
- 嵌入式开发基本环境搭建---ubuntu
- Knowledge-aware Graph Neural Networks with Label Smoothness Regularization for Recommender Systems
- 设置360浏览器的背景为护眼模式(浅豆绿色)
- 全角和半角的区别及使用方式
- 20个免费下载PSD设计网站
- 云计算基础设施平台iaas(openstack)超级详细搭建(十三) 安装Trove服务
- 童玲:蚂蚁金服区块链在真实业务场景的实践与突破
- Intel® oneAPI Base Toolkit+Intel® oneAPI HPC Toolkit安装教程+环境变量设置
- 新建git分支(歪门邪道)
- 【怎么制作电子画册】云展网教程 | 如何设置默认模版