OpenCV之最值滤波和非最值抑制
来源:互联网 发布:io是什么域名 编辑:程序博客网 时间:2024/04/27 15:29
// 描述 : 实现最值滤波,非最值抑制//====================================================================#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;h=(h==0?w:h);rect.x=cx-(w>>1);rect.y=cy-(h>>1);rect.width=w;rect.height=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; }
<p>最大值滤波结果:</p><img alt="" src="http://img.blog.csdn.net/20130803145020468" /><p>最小值滤波结果:</p><p><img alt="" src="http://img.blog.csdn.net/20130803145147093" /></p><p>非最大值抑制结果:</p><p><img alt="" src="http://img.blog.csdn.net/20130803145212718" /></p><p>非最小值抑制结果:</p><p><img alt="" src="http://img.blog.csdn.net/20130803145237390" /></p>
0 0
- OpenCV之最值滤波和非最值抑制
- opencv学习之中值滤波和双边滤波
- OpenCV滤波之copyMakeBorder和borderInterpolate
- OpenCV滤波之copyMakeBorder和borderInterpolate
- OpenCV滤波之copyMakeBorder和borderInterpolate
- OpenCV滤波之copyMakeBorder和borderInterpolate
- OpenCV滤波之copyMakeBorder和borderInterpolate .
- opencv之 图像滤波
- opencv基础之滤波
- matlab和OpenCV滤波
- (转)OpenCV滤波之copyMakeBorder和borderInterpolate
- OpenCV之九 非线性滤波专场:中值滤波、双边滤波
- 读OpenCV之小侃高斯滤波
- opencv之卡尔曼滤波
- 读OpenCV之小侃高斯滤波
- OpenCV之图像滤波简述
- opencv学习之图像滤波
- Opencv学习之线性滤波
- gitHub的那些开源的项目
- Hadoop-2.3.0-cdh5.0.1完全分布式环境搭建(NameNode,ResourceManager HA)
- oracle数据库备份及还原-
- 九度OJ 1082 清华大学2009年机试
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- OpenCV之最值滤波和非最值抑制
- LeetCode——Longest Substring Without Repeating Characters
- Struts2 - 常用的constant总结
- PC级影像处理技术上身 3D/4K手机吸睛力大增
- 常用oracle命令
- pycurl完成http_request
- ORA-10631: SHRINK clause should not be specified for this object
- Django数据库的一些操作
- gstreamer 一些结构体