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图像切割的更多相关文章

  1. opencv2.4.13+python2.7学习笔记--OpenCV中的图像处理--图像轮廓

    阅读对象:无要求. 1.代码 ''' OpenCV中的轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.为了更加准确,要使用二值化图像.在寻找轮廓之前,要进行阈值化 ...

  2. OpenCV——使用ROI进行图像切割

    ROI(region of interest)——感兴趣区域. 1.用途 这个区域是图像分析所关注的重点.圈定这个区域,以便进行进一步的处理.而且,使用ROI指定 想读入的目标,可以减少处理时间,增加 ...

  3. opencv2.4.13+python2.7学习笔记--OpenCV中的图像处理--图像轮廓特征和几何矩

    阅读对象:对概率论中的期望有一点了解. 1.图像几何矩 1.1简述 图像的几何矩包括空间矩.中心矩和中心归一化矩.几何矩具有平移.旋转和尺度不变性,一般是用来做大粒度的区分,用来过滤显然不相关的图像. ...

  4. OpenCV学习(39) OpenCV中的LBP图像

    本章我们学习LBP图像的原理和使用,因为接下来教程我们要使用LBP图像的直方图来进行脸部识别. 参考资料: http://docs.opencv.org/modules/contrib/doc/fac ...

  5. (原)Opencv中直方图均衡和图像动态范围拉伸的代码

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5102032.html 参考网址: http://blog.csdn.net/abcjennifer/a ...

  6. 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换

    在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...

  7. [OpenCV-Python] OpenCV 中视频分析 部分 VI

    部分 VI视频分析 OpenCV-Python 中文教程(搬运)目录 39 Meanshift 和 和 Camshift 目标 • 本节我们要学习使用 Meanshift 和 Camshift 算法在 ...

  8. 图像金字塔及其在 OpenCV 中的应用范例(下)

    前言 本文将主要讲解如何使用 OpenCV 实现图像分割,这也是图像金字塔在 OpenCV 中的一个重要应用. 关于图像分割 在计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分 ...

  9. opencv分水岭算法对图像进行切割

    先看效果 说明 使用分水岭算法对图像进行切割,设置一个标记图像能达到比較好的效果,还能防止过度切割. 1.这里首先对阈值化的二值图像进行腐蚀,去掉小的白色区域,得到图像的前景区域.并对前景区域用255 ...

随机推荐

  1. SuperSocket源码解析之启动过程

    一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2.1 配置解析 从读取配置文件开始,直接拿到一个SocketServiceConfi ...

  2. 微软新一代输入法框架 TSF - Text Service Framework 小小的研究

    实际上windows中有两套输入法框架,一套叫做imm32.一套叫做tsf,win7以后的新系统都是优先使用tsf的,现在新出的输入法基本也是基于tsf的. 你可以参考一下这篇文章,虽然是c++的代码 ...

  3. Windows8下通过IPv4地址访问Tomcat

    最近在做Android开发,手机客户端需要通过IPv4地址访问电脑启动的Web应用服务. 在Windows 7不需要做什么设置,localhost,127.0.0.1或者192.168.0.100都可 ...

  4. Oracle undo 镜像数据探究

                                                                 Oracle undo 镜像数据探究  今天是2013-08-18,隔别一周的 ...

  5. Windows下sass的安装

    sass依赖Ruby,所以,首先得先安装个Ruby 安装步骤: 1.安装Ruby的时候,勾上Add Ruby executables to your PATH(添加环境变量) 2.安装好Ruby之后, ...

  6. MDK的优化应用

    MDK的优化应用 http://blog.163.com/zhaojun_xf/blog/static/300505802011291384721/ 使用Keil/MDK这么多年了,一直都没有使用它的 ...

  7. 幻世(OurDream)2D图形引擎使用教程9——处理操作输入(3)

    声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 现在我们该 ...

  8. 基于perl面向对象开发的微信机器人

    <pre name="code" class="html">[root@wx03 lib]# ls -ltr total 40 -rw-r--r-- ...

  9. POJ 2187 Beauty Contest 凸包

    Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 27276   Accepted: 8432 D ...

  10. MinGW 介绍

    SDL新手教程(一):3.MinGW 下的安装与设置 作者:龙飞 3.1:MinGW 是什么? MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境.MinGW 收集了一系列免费 ...