参考:这个帖子的主要代码有错误,根据回帖改了一些

http://www.cnblogs.com/tornadomeet/archive/2012/06/06/2538695.html

// meanshift.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
// meanshift_segmentation.cpp : 定义控制台应用程序的入口点。
// #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream> #pragma comment(lib,"opencv_highgui2410d.lib")
#pragma comment(lib,"opencv_core2410d.lib")
#pragma comment(lib,"opencv_imgproc2410d.lib") 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() { ////调用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(j,i),newcolor,0,Scalar::all(1),Scalar::all(1)); } imshow("dst",dst); } void meanshift_seg_s(int i,void *) { spatialRad = i; meanshift_seg(); } void meanshift_seg_c(int i,void *) { colorRad = i; meanshift_seg(); } void meanshift_seg_m(int i,void *) { maxPryLevel = i; meanshift_seg(); } int main(int argc, uchar* argv[]) { namedWindow("src",WINDOW_AUTOSIZE); namedWindow("dst",WINDOW_AUTOSIZE); src=imread("swan.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_s); createTrackbar("colorRad","dst",&colorRad,60,meanshift_seg_c); createTrackbar("maxPryLevel","dst",&maxPryLevel,5,meanshift_seg_m); // meanshift_seg(0,0); imshow("src",src); /*char c=(char)waitKey(); if(27==c) return 0;*/ imshow("dst",src); imshow("flood",src); waitKey();//无限等待用户交互响应 // while(1);//这里不能用while(1)的原因是需要等待用户的交互,而while(1)没有该功能。虽然2者都有无限等待的作用。 return 0; }

实现效果:

OpenCV meanshift 图像分割代码的更多相关文章

  1. 对opencv MeanShift 融合矩形框的改进

    OPENCV 中的代码改进.当然要依据自己的实际情况来,OPENCV 中行人检測有两种矩形框的融合算法.这里仅仅对meanshift 方法做改进 假设有更好的方法.希望能够跟我讲下. 对于去除重合部分 ...

  2. Windows环境下最新OpenCV和Contribute代码的联合编译

    解决这个问题,目的在于获得并使用最新的完全版本的代码,主要方法是对CMake能够熟练使用,并且对编译等基础支持有所了解. 一.工具的准备 1 tortoisegit www.tortoisegit.o ...

  3. Windows环境下最新OpenCV和Contribute代码的联合编译【20180926更新红字】

    解决这个问题,目的在于获得并使用最新的完全版本的代码,主要方法是对CMake能够熟练使用,并且对编译等基础支持有所了解. 因为这篇博客经过多次修改,所以里面的内容和配图可能有不是完全比对的地方,但是只 ...

  4. Windows环境下最新OpenCV和Contribute代码的联合编译【20190505更新红字】

    解决这个问题,目的在于获得并使用最新的完全版本的代码,主要方法是对CMake能够熟练使用,并且对编译等基础支持有所了解. 因为这篇博客经过多次修改,所以里面的内容和配图可能有不是完全比对的地方,但是只 ...

  5. 在windows中python安装sit-packages路径位置 在Pycharm中导入opencv不能自动代码补全问题

    在Pycharm中导入opencv不能自动代码补全问题 近期学习到计算机视觉库的相关知识,经过几个小时的探讨,终于解决了opencv不能自动补全代码的困惑, 我们使用pycharm安装配置可能会添加多 ...

  6. OpenCV 1 图像分割--分水岭算法代码

    // watershed_test20140801.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" // // ch9_watershed ...

  7. OpenCV 之 图像分割 (一)

    1  基于阈值 1.1  基本原理 灰度阈值化,是最简单也是速度最快的一种图像分割方法,广泛应用在硬件图像处理领域 (例如,基于 FPGA 的实时图像处理). 假设输入图像为 f,输出图像为 g,则经 ...

  8. opencv颜色识别代码分享

    android 平台 opencv 实现颜色识别代码:http://www.eyesourcecode.com/thread-40682-1-1.htmlopencv的颜色识别简单实现的代码:http ...

  9. opencv 金字塔图像分割

    我所知的opencv中分割函数:watershed(只是看看效果,不能返回每类pixel类属),cvsegmentImage,cvPyrSegmentation(返回pixel类属) 金字塔分割原理篇 ...

随机推荐

  1. Java进阶(四十七)Socket通信

    Java进阶(四十七)Socket通信   今天讲解一个 Hello Word 级别的 Java Socket 通信的例子.具体通讯过程如下: 先启动Server端,进入一个死循环以便一直监听某端口是 ...

  2. Unity3D核心技术详解

    在这里将多年游戏研发经验的积累写成一本书奉献给读者,目前已经开始预售,网址: http://www.broadview.com.cn/article/70 该书主要是将游戏中经常使用的技术给大家做了一 ...

  3. WINDOWS系统注册表取得管理权限研究

    有的时候开发我们需要取得系统管理员权限,可以通过修改注册表实现,研究网上的各种方法,整理得一下脚本实现取得管理员权限 脚本如下 Windows Registry Editor Version 5.00 ...

  4. 剑指Offer——银行网申内容模版

    剑指Offer--银行网申内容模版 年获得"优秀共青团员"称号 2013.12 科技标兵 2013.10 三好学生 2013.10 "三下乡"优秀学生 2013 ...

  5. 最简单的基于DirectShow的示例:视频播放器图形界面版

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...

  6. J2EE进阶(六)SSH框架工作流程项目整合实例讲解

    J2EE进阶(六)SSH框架工作流程项目整合实例讲解 请求流程 经过实际项目的进行,结合三大框架各自的运行机理可分析得出SSH整合框架的大致工作流程. 首先查看一下客户端的请求信息: 对于一个Web项 ...

  7. 通过邮件找回密码功能的Java实现

    1.有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人 ...

  8. UE4使用widget创建UI界面播放视频

    我的目的非常简单,点击按钮,播放或暂停场景中的视频 1.准备了一个mp4视频资源,为视频资源创建了一个Media Texture,在Media Player中选择导入进来的视频资源,再为Media T ...

  9. 使用FMDB多线程访问数据库,及database is locked的问题

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 今天终于解决了多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finalizi ...

  10. MySQL数据库安装与配置详解(图文)

    接下来看一下如何安装mysql数据库. 由于有更详细的教程资源,因此参考别人的文章以整理.安装教程参考自博客园文章http://www.cnblogs.com/sshoub/p/4321640.htm ...