平滑處理Smooth之圖像預處理算法-OpenCV應用學習筆記三

                              logo_thumb9_thumb

 

 

大清早的咱們就來作一個簡單有趣的圖像處理算法實現,做爲對圖像處理算法學習的開端吧。之因此有趣就在於筆者把算法處理的各個方式的處理效果拿出來作了對比,給你看到原圖和各類處理後的圖像你是否可以知道那幅圖對應那種算法模式呢?嘻嘻,拭目以待吧算法

平滑的意義:函數

圖像平滑image smoothing:壓制、弱化或消除圖像中的細節、突變、邊緣和噪聲,就是圖像平滑化。學習

圖像平滑是對圖像做低通濾波,可在空間域頻率域實現。空間域圖像平滑方法主要用低通卷積濾波、中值濾波等;頻率域圖像平滑經常使用的低通濾波器有低通梯形濾波器、低通高斯濾波器、低通指數濾波器、巴特沃思低通濾波器等。ui

實現功能:

    自動對工程項目目錄下的圖片lena.jpg進行平滑處理:採用五種平滑算法,分別顯示在五個窗口中方便對比查看效果和各自特色。spa

TKO}7SH$B@G_]}S1)[{Z1P5

函數精析:

  • cvSmooth(const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, doubleparam4=0)

  • src輸入圖像,dst輸出圖像,smoothtype平滑方式,param四個參數
  • smoothtype五種:CV_BLUR_NO_SCALE(0),CV_BLUR(1), CV_GAUSSIAN(2) ,CV_MEDIAN (3) ,CV_BILATERAL(4)
  • CV_BLUR_NO_SCALE(0):無縮放比例的線性卷積,利用參1*參2的結構元進行卷積,僅支持單通道圖像
  • CV_BLUR(1):先線性卷積後縮放,縮放比例爲1/(參1*參2)
  • CV_GAUSSIAN(2) :利用參1*參2的高斯結構元進行高斯濾波
  • CV_MEDIAN (3):利用參1*參2的方形結構元進行中值濾波
  • CV_BILATERAL(4):利用參1*參2的方形結構元進行雙邊濾波
  • 最有意思的是該函數如今已經顯得無力了,徹底能夠被GaussianBlur(), blur(), medianBlur(),obilateralFilter()取代,從圖像平滑效果也能夠看出。筆者在這裏是開篇從基礎引入,算是拋本身的磚啦

                                                                                                                                                                                                                                                                           

  • 附源代碼:

#include "stdafx.h"
#include"cv.h"
#include"highgui.h"
void main()
{
    IplImage* pImg = cvLoadImage("lena.jpg",1); 

    cvNamedWindow("Example4-in");
    cvNamedWindow("Example4-out-GAUSSIAN");
    cvNamedWindow("Example4-out-CV_BLUR_NO_SCALE");
    cvNamedWindow("Example4-out-CV_BLUR");
    cvNamedWindow("Example4-out-CV_MEDIAN");
    cvNamedWindow("Example4-out-CV_BILATERAL");
    cvShowImage("Example4-in",pImg);

    /*        分配各個圖像的結構空間用來存儲平滑後的圖像         */
    IplImage* out1 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    IplImage* out2 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    IplImage* out3 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    IplImage* out4 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    IplImage* out5 = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);

    cvSmooth(pImg,out1,CV_GAUSSIAN,3,3);        //平滑處理
    cvSmooth(pImg,out2,CV_BLUR_NO_SCALE,3,3);
    cvSmooth(pImg,out3,CV_BLUR,3,3);
    cvSmooth(pImg,out4,CV_MEDIAN,3,3);
    cvSmooth(pImg,out5,CV_BILATERAL,3,3);

     
     
    cvShowImage("Example4-out-GAUSSIAN",out1);
    cvShowImage("Example4-out-CV_BLUR_NO_SCALE",out2);
    cvShowImage("Example4-out-CV_BLUR",out3);
    cvShowImage("Example4-out-CV_MEDIAN",out4);
    cvShowImage("Example4-out-CV_BILATERAL",out5);
    cvWaitKey(0);
    cvReleaseImage(&out1);
    cvReleaseImage(&out2);
    cvReleaseImage(&out3);
    cvReleaseImage(&out4);
    cvReleaseImage(&out5);

    cvWaitKey(0);
    cvDestroyWindow("Example4-in");
    cvDestroyWindow("Example4-out-GAUSSIAN");
    cvDestroyWindow("Example4-out-CV_BLUR_NO_SCALE");
    cvDestroyWindow("Example4-out-CV_MEDIAN");
    cvDestroyWindow("Example4-out-CV_BILATERAL");
    cvDestroyWindow("Example4-out-CV_BLUR");
}
相關文章
相關標籤/搜索