opencv中的meanshift图像切割
Meanshift(均值漂移)是一种在一组数据的密度分布中寻找局部极值的稳定的方法。Meanshift不仅能够用于图像滤波,视频跟踪,还能够用于图像切割。
通过给出一组多维数据点,其维数是(x,y,r,g,b),均值漂移能够用一个窗体扫描空间来找到数据密度最大的区域,能够理解为数据分布最集中的区域。
在这里须要注意,因为空间位置(也就是上面的x和y)的变化范围与颜色的变化范围(上面的r,g,b)有极大的不同,所以,meanshift对这两个维数要採用不同的窗体半径。在opencv自带的meanshift切割函数cvPyrMeanShiftFiltering()中,就专门有2个半径參数,各自是spatialRadius和colorRadius,这两个參数分别代表的是空间半径(x,y)和颜色(r,g,b)半径。
当均值漂移窗体移动时,经过窗体变换后收敛到数据峰值的全部点都会连通起来,而且属于该峰值。这样的所属关系从密集的尖峰辐射,形成了图像的切割。opencv中的meanshift切割实际上是由比例金字塔(cvPyrUP(),cvPyrDown())完毕的,相关的介绍大家能够看年learning
opencv中关于图像金字塔的介绍。
以下的代码是我自己写的,大家能够參考一下。PS:我执行的时候发现实际上cvPyrMeanShiftFiltering的执行效率并非非常高,特别是把spatialRadius的值增大以后迭代时感觉非常费时。
#include"highgui.h"
#include"cv.h" #include <iostream> using namespace cv;
using namespace std; IplImage* src; //source image
IplImage* dst; //the dst image after meanshift
int spatialRad=10,colorRad=20,maxPryLevel=1; void on_Meanshift(int ) //the callback function
{ //cout<<"spatialRad="<<spatialRad<<endl; //for test
//cout<<" colorRad="<<colorRad<<endl;
//cout<<" maxPryLevel="<<maxPryLevel<<endl;
cvPyrMeanShiftFiltering(src,dst,spatialRad,colorRad,maxPryLevel); //segmentation use meanshift
cvShowImage("dst",dst); //show the segmented image }
void main()
{
src = cvLoadImage("1.png"); //load the picture
CvSize size;
size.width = src->width;
size.height = src->height;
dst = cvCreateImage(size,src->depth,3); //set the size of the dst image
cvNamedWindow("src",CV_WINDOW_AUTOSIZE);
cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);
cvShowImage("src",src);
cvPyrMeanShiftFiltering(src,dst,spatialRad,colorRad,maxPryLevel); //create the trackbar
cvCreateTrackbar("spatialRad","dst",&spatialRad,50,on_Meanshift);
cvCreateTrackbar("colorRad","dst",&colorRad,60,on_Meanshift);
cvCreateTrackbar("maxPryLevel","dst",&maxPryLevel,5,on_Meanshift); cvShowImage("dst",dst); cvWaitKey(0);
}
在代码中使用了trackbar,因此能够自己 改变spatialRad,colorRad,maxPryLevel的值,以便观察不同參数下的效果。截图例如以下
以下图是源图片
opencv中的meanshift图像切割的更多相关文章
- opencv2.4.13+python2.7学习笔记--OpenCV中的图像处理--图像轮廓
阅读对象:无要求. 1.代码 ''' OpenCV中的轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.为了更加准确,要使用二值化图像.在寻找轮廓之前,要进行阈值化 ...
- OpenCV——使用ROI进行图像切割
ROI(region of interest)——感兴趣区域. 1.用途 这个区域是图像分析所关注的重点.圈定这个区域,以便进行进一步的处理.而且,使用ROI指定 想读入的目标,可以减少处理时间,增加 ...
- opencv2.4.13+python2.7学习笔记--OpenCV中的图像处理--图像轮廓特征和几何矩
阅读对象:对概率论中的期望有一点了解. 1.图像几何矩 1.1简述 图像的几何矩包括空间矩.中心矩和中心归一化矩.几何矩具有平移.旋转和尺度不变性,一般是用来做大粒度的区分,用来过滤显然不相关的图像. ...
- OpenCV学习(39) OpenCV中的LBP图像
本章我们学习LBP图像的原理和使用,因为接下来教程我们要使用LBP图像的直方图来进行脸部识别. 参考资料: http://docs.opencv.org/modules/contrib/doc/fac ...
- (原)Opencv中直方图均衡和图像动态范围拉伸的代码
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5102032.html 参考网址: http://blog.csdn.net/abcjennifer/a ...
- 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换
在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...
- [OpenCV-Python] OpenCV 中视频分析 部分 VI
部分 VI视频分析 OpenCV-Python 中文教程(搬运)目录 39 Meanshift 和 和 Camshift 目标 • 本节我们要学习使用 Meanshift 和 Camshift 算法在 ...
- 图像金字塔及其在 OpenCV 中的应用范例(下)
前言 本文将主要讲解如何使用 OpenCV 实现图像分割,这也是图像金字塔在 OpenCV 中的一个重要应用. 关于图像分割 在计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分 ...
- opencv分水岭算法对图像进行切割
先看效果 说明 使用分水岭算法对图像进行切割,设置一个标记图像能达到比較好的效果,还能防止过度切割. 1.这里首先对阈值化的二值图像进行腐蚀,去掉小的白色区域,得到图像的前景区域.并对前景区域用255 ...
随机推荐
- log翻硬币
若果有一组硬币,(假定有十个),每一个硬币仅仅有两个面,正面用以表示.反面用零表示. 给定目标(初始状态)1111100000 正正正正正反反反反反 (目标状态) 1000011101 正反反反反 ...
- Thinkpad W520 完美安装Ubuntu14.04LTS
Thinkpad W520 完美安装Ubuntu14.04LTS Ubuntu已经升级到14.04LTS,这是个长期支持的版本号.自从上次安装12.04LTS之后一直没有升级. 于是从站点上下载Ubu ...
- Linux - 输入输出流程序 代码(C)
输入输出流程序 代码(C) 本文地址:http://blog.csdn.net/caroline_wendy 使用输入输出流,控制文件流. STDIN_FILENO,STDOUT_FILENO代表标准 ...
- WinForm - ListView点击空白事件
有时看似很小的一个问题却可能困扰我们许久,比如ListView这个问题,其Click事件只是在有选中项的时候才触发,点击其空白处(无选中项)是不会触发Click事件的,找了许久才终于找到解决这个问题的 ...
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)
书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: 1 2 3 ...
- 怎样从 Google Play 下载 Android 程序到电脑上
想必非常多朋友也有须要通过电脑下载Google Play的apk到电脑端的时候,事实上非常easy,推荐一个站点:APK Downloader APK Downloader 是一个能直接从网页下载Go ...
- 中转server
中转传输概要设计 中转传输的消息架构为模拟MFC的消息架构,请參考我的上一篇文章. 1. 概述 中转server採用事件驱动的方式,与socket结合.其层次例如以下: 在事件驱动层中,将相关消息发送 ...
- JS firebug小技巧
实际上前端的发展与进步也离不开浏览器的支持,而对于开发者来讲,浏览器最好的支持,就是对于debug的良好支持,甚至在某些兴许接手的项目中,前端的debug甚至能够解决好多问题--不说了,都是泪啊!还是 ...
- Javascript 正确用法 二
好的,废话不多说,接着上篇来. 变量(variables) 始终使用 var keyword来定义变量,假设不这样将会导致 变量全局化,造成污染. //bad superPower = new Sup ...
- cms配置使用
在早期完成了页面的切图之后,需要配置cms来实现小编上传数据更新页面的流程,在取得SEO的官网URL规则之后,就能开始官网在cms的基本配置了. 下面介绍cms的特点: 类别,决定内容与内容对应的路径 ...