pyrMeanShiftFiltering函数

对图像进行:均值偏移滤波

调用格式:

void cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst,double sp, double sr, int max_level=1,CvTermCriteria termcrit=cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1));
src
输入的8-比特,3-信道图象.
dst
和源图象相同大小,相同格式的输出图象.
sp
The spatial window radius.
空间窗的半径
sr
The color window radius.
色彩窗的半径
max_level
Maximum level of the pyramid for the segmentation.

我们先借助Mean Shift算法的分割特性将灰度值相近的元素进行聚类,然后,在此基础上应用阈值分割算法,

达到将图像与背景分离的目的。 简单来说,基于Mean Shift的图像分割过程就是首先利用Mean Shift算法对图像中的像素进行聚类,

即把收敛到同一点的起始点归为一类,然后把这一类的标号赋给这些起始点,同时把包含像素点太少的类去掉。

然后,采用阈值化分割的方法对图像进行二值化处理 基于Mean Shift的图像分割算法将图像中灰度值相近的像素点聚类为一个灰度级,

因此,经过Mean Shift算法分割后的图像中的灰度级较该算法处理之前有所减少。

opencv代码:

// meanshift_segmentation.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>using namespace cv;
using namespace std;Mat src,dst;
int spatialRad=10,colorRad=10,maxPryLevel=1;
//const Scalar& colorDiff=Scalar::all(1);void meanshift_seg(int,void *)
{//调用meanshift图像金字塔进行分割pyrMeanShiftFiltering(src,dst,spatialRad,colorRad,maxPryLevel);RNG rng=theRNG();Mat mask(dst.rows+2,dst.cols+2,CV_8UC1,Scalar::all(0));for(int i=0;i<dst.rows;i++)    //opencv图像等矩阵也是基于0索引的for(int j=0;j<dst.cols;j++)if(mask.at<uchar>(i+1,j+1)==0){Scalar newcolor(rng(256),rng(256),rng(256));floodFill(dst,mask,Point(i,j),newcolor,0,Scalar::all(1),Scalar::all(1));//        floodFill(dst,mask,Point(i,j),newcolor,0,colorDiff,colorDiff);}imshow("dst",dst);
}int main(int argc, uchar* argv[])
{namedWindow("src",WINDOW_AUTOSIZE);namedWindow("dst",WINDOW_AUTOSIZE);src=imread("stuff.jpg");CV_Assert(!src.empty());spatialRad=10;colorRad=10;maxPryLevel=1;//虽然createTrackbar函数的参数onChange函数要求其2个参数形式为onChange(int,void*)//但是这里是系统响应函数,在使用createTrackbar函数时,其调用的函数可以不用写参数,甚至//括号都不用写,但是其调用函数的实现过程中还是需要满足(int,void*)2个参数类型createTrackbar("spatialRad","dst",&spatialRad,80,meanshift_seg);createTrackbar("colorRad","dst",&colorRad,60,meanshift_seg);createTrackbar("maxPryLevel","dst",&maxPryLevel,5,meanshift_seg);//    meanshift_seg(0,0);imshow("src",src);/*char c=(char)waitKey();if(27==c)return 0;*/imshow("dst",src);waitKey();//无限等待用户交互响应
//    while(1);//这里不能用while(1)的原因是需要等待用户的交互,而while(1)没有该功能。虽然2者都有无限等待的作用。return 0;
}

pyrMeanShiftFiltering函数相关推荐

  1. OpenCV3学习(7.4)——图像分割之四(Meanshift算法,PyrMeanShiftFiltering函数)

    详情请转到https://blog.csdn.net/qq_30815237/article/details/86488192 mean shift还可用于视频跟踪,参见我的博客: https://b ...

  2. 图像均值迁移模糊:pyrMeanShiftFiltering()

    https://blog.csdn.net/kingkee/article/details/94437333 一.编程环境: OpenCV  4.1.0 IDE Visual Studio 2017 ...

  3. Mean Shift算法(3)在OpenCV上的实现——图像分割PyrMeanShiftFiltering

    Meanshift不仅可以用于视频跟踪,还可以用于图像分割.Meanshift算法找到空间上颜色分布的峰值,关注于颜色的空间分布:在视频跟踪领域组更关注于在连续帧中通过事件跟踪这些分布. 一般而言一副 ...

  4. OpenCV每日函数 专栏简述(陆续整理中)

    一.OpenCV概述 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库.OpenCV库拥有超过 2500 种优化算法,其中包 ...

  5. 【OpenCV 4开发详解】分割图像——Mean-Shift分割算法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  6. opencv进阶学习笔记11:cannny边缘检测,直线检测,圆检测

    基础版笔记传送门 python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) cannny边缘检测 基础版边 ...

  7. [Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. OpenCV入门(十)——图像分割技术

    目录 0x01 FloodFill分割 0x02 均值漂移MeanShift 0x03 图割Grabcut 0x04 奇异区域检测 0x05 肤色检测 0x01 FloodFill分割 FloodFi ...

  9. OpenCV NAO机器人辅助捡球丢球

    文章目录 1. 概述 2. 相关技术 2.1 NAO机器人 2.2 Choregraphe 2.3 OpenCV 3. 总体设计与详细设计 3.1 系统模块划分 3.2 主要功能模块 4 遇到的问题 ...

最新文章

  1. Docker学习(三)-----Docker镜像常用命令
  2. POJ-2524-Ubiquitous Religions
  3. 实现自己的“单页”博客,只需要一个指令 (Moka)
  4. 得到classpath和当前类的绝对路径的一些方法
  5. 《天际友盟DRP数字风险防护报告(2021年上半年)》重磅发布
  6. Java 开发的编程噩梦,这些坑你没踩过算我输
  7. 新服务器配置 显示,新服务器配置纪录
  8. hello一直显示与服务器断开,新手问题--服务器环境部署hello world
  9. java导出excel 客户端_java如何将导出的excel下载到客户端
  10. JAX-RPC学习笔记(1)-Hello World!
  11. COPRA RF 2005_
  12. 嵌入式程序和FW的区别
  13. 软件工程——软件结构图设计(变换分析设计、事务分析设计、混合流设计)
  14. python声音识别歌曲_听歌识曲--用python实现一个音乐检索器的功能
  15. Javaweb google身份宝验证
  16. JS报错 Uncaught TypeError: undefined is not a function,解决
  17. 了解Swift:15个适合iOS应用开发的初学者友好资源
  18. 几类自适应波束形成算法推导
  19. 安装ps显示检测到计算机,修复:win10下Photoshop遇到显示驱动程序问题
  20. IntelliJ Idea SpringBoot 数据库增删改查实例

热门文章

  1. 手持机设备公司(WINCE/ANDROID/LINUX)
  2. 学习笔记第二十五节课
  3. 用VIM打造C语言编写器
  4. Android测试分析3
  5. 我已经把servlet-api.jar加到classpath中了,可还是无法编译servlet
  6. Linux下MySQL链接被防火墙阻止
  7. LA 6474 Drop Zone (最小割)
  8. KVM配置之(3)- 克隆
  9. 纯JS制作的窗户雨滴效果
  10. C# 使用反射设置某个对象的属性或读取某个对象的属性