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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM