zoukankan      html  css  js  c++  java
  • opencv中的滤波

      以前的时候,为了过滤图像中的一些噪点,学过一些简单的滤波,比如中值滤波,均值滤波,也是自己实现的。

      在opencv中有现成的函数可以调用,实现滤波的操作。

      函数的原型如下:

    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));

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

      第三个参数是传入一个值,表示现在滤波的方式;

      最后四个值一般用来表示模板的大小

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

    CV_BLUR

    简单模糊       对每个像素点做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

  • 相关阅读:
    织梦标签调用:根据特定需求调用文章的标签代码
    织梦DedeCMS信息发布员发布文章阅读权限不用审核自动开放亲测试通过!
    javascript中的this和e.target的深入研究
    vue-cli入门(二)——项目结构
    Mysql千万级大数据量查询优化
    MySQL大数据量分页查询方法及其优化
    Spring Bean的生命周期分析
    多线程下,两个线程交替打印0 -100,使用wait()和notify()
    ReentrantLock
    多线程交替打印ABC的多种实现方法
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3528508.html
Copyright © 2011-2022 走看看