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 ...
随机推荐
- 新鲜出炉的Using Qt 3D to visualize music
http://blog.qt.io/blog/2016/01/27/using-qt-3d-visualize-music/
- JAVA_2Lesson
package test; public class abc { public static void main(String[] arg) { int[][] xx=new int[3][]; xx ...
- SQLServer分页查询存储过程
项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1, ...
- Python基础入门教程
Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...
- mac下和windows下清空DNS缓存
在WIN下: > ipconfig /flushdns 在mac下: 对于低版本系统,在命令行窗口(terminal)输入 lookupd -flushcache 即可: $ sudo look ...
- QWidget类中默认是忽略inputMethodEvent事件(要获取输入的内容就必须使用这个事件)
因为项目的需要以及主管的要求,准备将工程移植到Qt中,这样就可以比较容易的实现跨平台了.因为之前工程是在windows下开发的,第一个平台又是mobile所以除了底层框架之外其他的都是使用的windo ...
- timesetevent与timekillevent的用法
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs ...
- 硬盘被误格式化或Ghost还原后的数据恢复
硬盘格式化(Ghost还原)后的数据恢复 ---diskgenius使用之数据恢复 问题引出:计算机中病毒后用Ghost版本的winxp安装,由于安装途中选择了把映像安装到硬盘而不是分区,安装好后只剩 ...
- XML 关键字
SGML--Standard Generalized Marked Language 标准通用标记语言GML--Generalized Marked Language 通用标记语言XML--Extes ...
- 深入理解extern使用方法
一. extern做变量声明 l 声明externkeyword的全局变量和函数可以使得它们可以跨文件被訪问. 我们一般把全部的全局变量和全局函数的实现都放在一个*.cpp文件中面,然后用一个同名的 ...