0penCV_(Watershed Segmenter)使用 分水岭算法 对图像进行分割
//使用 分水岭算法 对图像进行分割
cv::Mat image = cv::imread("../../aTestImage/cow.jpg", 1);
cv::Mat image1 = cv::imread("../../aTestImage/cow.jpg", 0);
cv::Mat binary;cv::threshold(image1, binary, 60, 255, cv::THRESH_BINARY_INV);//阈值化得到二值化图像binarycv::namedWindow("image", 1);
cv::imshow("image", image);cv::Mat fg;
cv::erode(binary, fg, cv::Mat(), cv::Point(-1, -1), 6);//用点Point对图像腐蚀6次// cv::namedWindow("fg", 1);
//cv::imshow("fg", fg);cv::Mat bg;
cv::dilate(binary, bg, cv::Mat(), cv::Point(-1, -1), 6);//用点Point对图像膨胀6次
cv::threshold(bg, bg, 1, 128, cv::THRESH_BINARY_INV);
//cv::namedWindow("bg", 1);
//cv::imshow("bg", bg);cv::Mat markers(binary.size(), CV_8U, cv::Scalar(0));
markers = fg + bg;
cv::namedWindow("markers", 1);cv::imshow("markers", markers);WatershedSegmenter segmenter;
segmenter.setMarkers(markers);//通过对二值图像的腐蚀+膨胀,获得标记图像
markers = segmenter.process(image); // markers是一个数组,图像显示为纯黑cv::namedWindow("Segmentation");//显示分割图像
cv::imshow("Segmentation", segmenter.getSegmentation());cv::namedWindow("Watersheds");//显示边界图像
cv::imshow("Watersheds", segmenter.getWatersheds());cv::waitKey(0);
return 0;
}class WatershedSegmenter
{
public:
WatershedSegmenter();
~WatershedSegmenter();
void setMarkers(const cv::Mat &markerImage)
{
markerImage.convertTo(markers,CV_32S);
}
cv::Mat process(const cv::Mat &image)
{
cv::watershed(image, markers);
return markers;
}
cv::Mat getSegmentation()
{
cv::Mat tmp;
markers.convertTo(tmp, CV_8U);//等价于(tmp, CV_8U,1, 0) //double alpha=1, double beta=0
return tmp;}
cv::Mat getWatersheds()
{
cv::Mat tmp;
markers.convertTo(tmp, CV_8U,255,255);//只显示边界...
return tmp;
}
private:
cv::Mat markers;
};
0penCV_(Watershed Segmenter)使用 分水岭算法 对图像进行分割相关推荐
- 图像轮廓、凸包、图像的矩、分水岭算法、图像修补
文章目录 1.查找并绘制轮廓 1.1 寻找轮廓:findContours() 函数 1.2 绘制轮廓:drawContours() 函数 1.3 示例程序:轮廓查找 1.4 综合示例:查找并绘制轮廓 ...
- OpenCV库中watershed函数(分水岭算法)的详细使用例程
# 声明:如果有写的不对的地方欢迎指正! 一.分水岭算法 关于分水岭算法的具体原理我就不说了,网上搜一下很多.OpenCV中的watershed函数实现的分水岭算法是基于"标记"的 ...
- 分水岭matlab仿真,正确使用Matlab分水岭算法对细胞进行分割
我've run into a ton of trouble trying to get the watershed algorithm properly working on my images. ...
- 模式识别经典算法——FCM图像聚类分割(最简matlab实现)
算法的规格 算法的记号及参数 记号 更新公式 算法的流程 数学语言与程序语言 算法的实现matlab 客户端程序 FCM函数 效果演示 敛散性分析 聚类分割效果图 避免出现局部极小值的方法 从kmea ...
- 模式识别经典算法——Kmeans图像聚类分割(以最短的matlab程序实现)
kmeans之于模式识别,如同"hello world"之于C.之于任何一门高级语言. 算法的规格(specification) 在聚类问题(一般非监督问题)中,给定训练样本X={ ...
- OpenCV3学习(7.2)——图像分割之二(分水岭算法watershed)
分水岭算法原理 分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭 ...
- watershed(分水岭算法)
为了检测出图中轮廓: 算法效果比起slic差不少 借鉴文章,这个讲的很不错 OpenCv学习笔记5--图像分割之分水岭算法_wx612f24149b7fc的技术博客_51CTO博客https://bl ...
- Python OpenCV分水岭算法分割和提取重叠或有衔接的图像中的对象
本文将介绍如何使用分水岭算法对触摸和重叠的图像中的对象进行分割和提取. 参考:https://www.pyimagesearch.com/2015/11/02/watershed-opencv/ 分水 ...
- OpenCV 【四】————Watershed Algorithm(图像分割)——分水岭算法的原理及实现
分水岭算法实现(C++.opencv) 1.作用: 通常用于分割图像,主要实现以临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性 ...
- 分水岭算法分割图像的原理概述及OpenCV代码实现
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 前面博文中提到的图像阈值化,图像边缘检测,图像轮 ...
最新文章
- c语言万年历的设计报告,万年历设计报告
- POJ1042 贪心钓鱼
- python while 循环 if elif else 判断
- 关于SAP云平台的Identity Authentication tenant
- ES6(三)——Set、WeakSet、Map、WeakMap
- mysql 字符串搜_mysql – 在表中搜索字符串的SQL查询?
- 两分钟搞定阿里SQL面试题:亿级表合并
- Python标准库参考-sched
- MTK:UART串口收发数据
- SQL Server 2008安装
- 关于IDM下载器免费注册这件事
- redis列表list常用命令大全
- puk码怎么查询_手机PUK码怎么查询?使用PUK码解锁手机电话SIM/USIM卡的教程
- 什么是测试开发工程师?
- 450米、90米、30米全国地形图DEM数据对比与分享
- qq游戏坦大战服务器维护中,高手教你如何解决QQ游戏问题
- oracle的lpad函数
- 服务器数据迁移:为知笔记私服数据迁移
- Spire.XLS:一款Excel处理神器(2)
- 1.1.7. Least Angle Regression(最小角回归)和 1.1.8. LARS Lasso
热门文章
- 内网渗透 - 权限维持 - Linux
- 消息队列 (1) mac安装RabbitMQ
- asp.net Checkbox 绑定自定义属性
- JS(JQUERY)操作框架页面全集
- 如何打开chrome中flash debug player
- python--时间日期
- 【D3.V3.js系列教程】--(十五)SVG基本图形绘制
- MEncoder的基础用法—6.10. 保持视频画面比例
- /dev/mapper/VolGroup-lv_root空间爆满解决
- 玩客云刷Armbian5.9.0安装青龙提示“面版解决服务异常,请手动执行ql check检查服务状态”