写了一段小程序,分享给大家!

//====================================================================
// 作者   : quarryman
// 邮箱   : quarrying{at}qq.com
// 主页   : http://blog.csdn.net/quarryman
// 日期   : 2013年08月03日
// 描述   : 实现最值滤波,非最值抑制
//====================================================================
#include <cv.h>
#include <highgui.h>
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#define min(a,b)            (((a) < (b)) ? (a) : (b))CvRect kcvRectIntersection(CvRect rect1,CvRect rect2)
{CvRect rect;rect.x=max(rect1.x, rect2.x);rect.y=max(rect1.y, rect2.y);rect.width=min(rect1.x+rect1.width, rect2.x+rect2.width);rect.width=rect.width-rect.x;rect.height=min(rect1.y+rect1.height, rect2.y+rect2.height);rect.height=rect.height-rect.y;return rect;
}CvRect kcvGetRectFromCenterAndSize(int cx, int cy, int w, int h=0)
{CvRect rect;rect.x=cx-(w>>1);rect.y=cy-(h>>1);rect.width=w;rect.height=(h==0?w:h);return rect;
}int minValue(IplImage* img,CvRect rect)
{uchar minval=255;for(int i=rect.y;i<rect.y+rect.height;++i){for(int j=rect.x;j<rect.x+rect.width;++j){if(CV_IMAGE_ELEM(img,uchar,i,j)<minval){minval=CV_IMAGE_ELEM(img,uchar,i,j);}}}return minval;
}int maxValue(IplImage* img,CvRect rect)
{uchar maxval=0;for(int i=rect.y;i<rect.y+rect.height;++i){for(int j=rect.x;j<rect.x+rect.width;++j){if(CV_IMAGE_ELEM(img,uchar,i,j)>maxval){maxval=CV_IMAGE_ELEM(img,uchar,i,j);}}}return maxval;
}enum
{KCV_MAX,       // 最大值滤波器,类似于形态学膨胀KCV_MIN,       // 最小值滤波器,类似于形态学腐蚀KCV_NMS_MAX,   // 非最大值抑制KCV_NMS_MIN        // 非最小值抑制
};void maxminFilter(IplImage* src,IplImage* dst,int width,int height=0,int mode=KCV_MAX)
{for(int j=0;j<src->width;++j){for(int i=0;i<src->height;++i){CvRect rect1=cvRect(0,0,src->width,src->height);CvRect rect2=kcvGetRectFromCenterAndSize(j,i,width,height);CvRect rect=kcvRectIntersection(rect1,rect2);switch(mode){case KCV_MAX:CV_IMAGE_ELEM(dst,uchar,i,j)=maxValue(src,rect);break;case KCV_MIN:CV_IMAGE_ELEM(dst,uchar,i,j)=minValue(src,rect);break;case KCV_NMS_MAX:if(CV_IMAGE_ELEM(src,uchar,i,j)!=maxValue(src,rect)){CV_IMAGE_ELEM(dst,uchar,i,j)=0;}else{CV_IMAGE_ELEM(dst,uchar,i,j)=CV_IMAGE_ELEM(src,uchar,i,j);}break;case KCV_NMS_MIN:if(CV_IMAGE_ELEM(src,uchar,i,j)!=minValue(src,rect)){CV_IMAGE_ELEM(dst,uchar,i,j)=255;}else{CV_IMAGE_ELEM(dst,uchar,i,j)=CV_IMAGE_ELEM(src,uchar,i,j);}break;}}}
}int main()
{IplImage* src=cvLoadImage("lena.jpg",0);IplImage* dst=cvCreateImage(cvGetSize(src),8,1);cvNamedWindow("original image");cvShowImage("original image",src);maxminFilter(src,dst,5,5,KCV_MAX);cvNamedWindow("maximum filter");cvShowImage("maximum filter",dst);cvSaveImage("maximum filter.jpg",dst);maxminFilter(src,dst,5,5,KCV_MIN);cvNamedWindow("minimum filter");cvShowImage("minimum filter",dst);cvSaveImage("minimum filter.jpg",dst);maxminFilter(src,dst,5,5,KCV_NMS_MAX);cvNamedWindow("non-maximum suppression");cvShowImage("non-maximum suppression",dst);cvSaveImage("non-maximum suppression.jpg",dst);maxminFilter(src,dst,5,5,KCV_NMS_MIN);cvNamedWindow("non-minimum suppression");cvShowImage("non-minimum suppression",dst);cvSaveImage("non-minimum suppression.jpg",dst);cvWaitKey(0);cvDestroyAllWindows();cvReleaseImage(&src);cvReleaseImage(&dst);return 0;
}

最大值滤波结果:

最小值滤波结果:

非最大值抑制结果:

非最小值抑制结果:

OpenCV之邻域运算之最值滤波相关推荐

  1. OpenCV 入门教程:中值滤波和双边滤波

    OpenCV 入门教程:中值滤波和双边滤波 导语 一.中值滤波 二.双边滤波 三.示例应用 3.1 图像去噪 3.2 图像平滑 总结 导语 在图像处理和计算机视觉领域,中值滤波和双边滤波是两种常见的滤 ...

  2. 《OpenCv视觉之眼》Python图像处理五 :Opencv图像去噪处理之均值滤波、方框滤波、中值滤波和高斯滤波

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  3. Opencv之图像滤波:5.中值滤波(cv2.medianBlur)

    之前介绍的均值滤波.方框滤波.高斯滤波,都是线性滤波方式.由于线性滤波的结果是所有像素值的线性组合,因此含有噪声的像素也会被考虑进去,噪声不会被消除,而是以更柔和的方式存在.这时使用非线性滤波效果可能 ...

  4. 图像平滑处理(归一化块滤波、高斯滤波、中值滤波、双边滤波)

    图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...

  5. 中值滤波(资料整理,持续更新)

    中值滤波(Median Filter),用于图像的中值滤波最早是由美国普林斯顿大学的John Wilder Tukey教授提出来的.常见的线性滤波器,用于图像处理时,有可能导致细节模糊或破坏边缘,更关 ...

  6. 转载之-中值滤波均值滤波

    转自:openCV之中值滤波&均值滤波(及代码实现):https://blog.csdn.net/weixin_37720172/article/details/72627543  在开始我们 ...

  7. 图像处理:中值滤波均值滤波

    转自:openCV之中值滤波&均值滤波(及代码实现):https://blog.csdn.net/weixin_37720172/article/details/72627543  在开始我们 ...

  8. 图像处理中的均值滤波和中值滤波

    在开始我们今天的博客之前,我们需要先了解一下什么是滤波: openCV之中值滤波&均值滤波(及代码实现)首先我们看一下图像滤波的概念.图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声 ...

  9. 【OpenCV 4开发详解】中值滤波

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

最新文章

  1. 【android】java.lang.NoClassDefFoundError或classnotfount等异常错误
  2. 华为,再牵手一流大学
  3. 东北大学 计算机网络试题,东北大学秦皇岛分校计算机网络考试试卷(含答案)
  4. ArcGIS API for Silverlight开发
  5. 大厂2020届实习生笔试题
  6. 在个人机上发布web项目
  7. Julia: 关于Github上的其它库
  8. mobi 转 pdf mobi格式转pdf格式 ePub azw3
  9. win10编译OpenCV4Android系列2-编译OpenCV4.5.2+opencv_contrib
  10. 朋友圈点赞截图在线生成源码
  11. Android Q 修改Fingerprint
  12. html怎样使图片自动旋转,css怎么让图片旋转?
  13. 只有10分,5分,2分,1分的硬币;顾客付款x分,商品价格y分。如何找零所使用的硬币最少(递归实现)
  14. vs单步调试及断点调试基本介绍
  15. 转Ruby on Rails的核心特性是什么
  16. win10关闭windows defender,CPU爆满问题
  17. App与H5交互的几种方式
  18. RXAndroid-exception:rx.exceptions.MissingBackpressureException
  19. 天下熙熙,皆为利来;天下攘攘,皆为利往。—第三十八天
  20. 《c primer pius》第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的

热门文章

  1. 单独获取ShopEx商品类型中的扩展参数,如配货时间
  2. JS实例操作QQ空间自动点赞方法
  3. 【JLOI2013】地形生成
  4. 《数学之美》——第三章 个人笔记
  5. 如何打造高性能Web应用
  6. JavaScript设计模式—富有表现力的Javascript(一)
  7. Vue watch如何同时监听多个属性?
  8. this.$nextTick()的使用场景
  9. vue给组件传递不同的值
  10. SpringBoot自定义参数