opencv中的滤波

  之前的时候,为了过滤图像中的一些噪点,学过一些简单的滤波,好比中值滤波,均值滤波,也是本身实现的。函数

  在opencv中有现成的函数能够调用,实现滤波的操做。学习

  函数的原型以下:ui

CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst,
                      int smoothtype CV_DEFAULT(CV_GAUSSIAN),
                      int size1 CV_DEFAULT(3),
                      int size2 CV_DEFAULT(0),
                      double sigma1 CV_DEFAULT(0),
                      double sigma2 CV_DEFAULT(0));

  前两个参数是输出图像的指针,目标图像的指针;spa

  第三个参数是传入一个值,表示如今滤波的方式;指针

  最后四个值通常用来表示模板的大小code

平滑类型  名称 支持 输入数据类型 输出数据类型 简要说明  

CV_BLURblog

简单模糊       对每一个像素点作size1*size2模板的求和sum,在ret=sum/(size1*size2)  

CV_BLUR_NO_SCALE图片

简单无缩放变化的模糊       对每一个像素点作size1*size2模板的求和sum,ret=sum  
CV_MEDIAN 中值模糊       对图像进行size1*size2模板的取中位数,ret=中位数  
CV_GAUSSIAN 高斯模糊       是一种加权平均的过程,若使用3×3模板,则计算公式以下g(x,y)={f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1)+[f(x-1,y)+f(x,y-1)+f(x+1,y)+f(x,y+1)]*2+f(x,y)*4}/16;  
CV_BILATERAL 双边滤波          

  对双边滤波了解的很少,下篇在细讲下= =内存

  函数的使用方法:原型

  

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int main(){
    IplImage *img= cvLoadImage("C:/lv2.jpg");//读取图片
    cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Example4",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Example5",CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Example6",CV_WINDOW_AUTOSIZE);

    cvShowImage("Example1",img);//在Example1显示图片
    //    cvCopy(img,temp);
    IplImage* temp=cvCreateImage( //建立一个size为image,三通道8位的彩色图
        cvGetSize(img),
        IPL_DEPTH_8U,
        3
        );
    cvSmooth(img,temp,CV_BLUR,3,3);//简单模糊
    cvShowImage("Example2",temp);

    cvSmooth(img,temp,CV_BLUR_NO_SCALE,3,3);//简单无缩放变化的模糊
    cvShowImage("Example3",temp);

    cvSmooth(img,temp,CV_MEDIAN,3,3);//中值模糊
    cvShowImage("Example4",temp);

    cvSmooth(img,temp,CV_GAUSSIAN,3,3);//高斯模糊
    cvShowImage("Example5",temp);

    cvSmooth(img,temp,CV_BILATERAL,1,150,240,480);//双边滤波
    cvShowImage("Example6",temp);

    cvWaitKey(0);//暂停用于显示图片


    cvReleaseImage(&img);//释放img所指向的内存空间而且
    cvDestroyWindow("Example1");
    cvDestroyWindow("Example2");
    cvDestroyWindow("Example3");
    cvDestroyWindow("Example4");
    cvDestroyWindow("Example5");
    cvDestroyWindow("Example6");
    
    return 0;
}

 

参考:学习opencv

相关文章
相关标签/搜索