大清早的我們就來做一個簡單有趣的圖像處理算法實現,作為對圖像處理算法學習的開端吧。之所以有趣就在於筆者把算法處理的各個方式的處理效果拿出來做了對比,給你看到原圖和各種處理后的圖像你是否能夠知道那幅圖對應那種算法模式呢?嘻嘻,拭目以待吧
平滑的意義:
圖像平滑image smoothing:壓制、弱化或消除圖像中的細節、突變、邊緣和噪聲,就是圖像平滑化。
圖像平滑是對圖像作低通濾波,可在空間域或頻率域實現。空間域圖像平滑方法主要用低通卷積濾波、中值濾波等;頻率域圖像平滑常用的低通濾波器有低通梯形濾波器、低通高斯濾波器、低通指數濾波器、巴特沃思低通濾波器等。
實現功能:
自動對工程項目目錄下的圖片lena.jpg進行平滑處理:采用五種平滑算法,分別顯示在五個窗口中方便對比查看效果和各自特點。
函數精析:
-
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"); }


![TKO}7SH$B@G_]}S1)[{Z1P5 TKO}7SH$B@G_]}S1)[{Z1P5](/image/aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvODc1OTE2LzIwMTYwMS84NzU5MTYtMjAxNjAxMjAxMjU2NTk1MzEtMTA5MDk0NTc3My5wbmc=.png)