天天看點

Opencv學習筆記——cvSmooth函數

一開始做圖像處理都是一個函數塊一個函數塊實作,通過學習才發現Opencv與Matlab相似,都有類似的處理函數。具體例子如下:

#include "stdio.h"
#include "highgui.h"
#include "cv.h"
int main(int argc, char* argv[])
{
    IplImage *img=cvLoadImage("Lena.png");
	cvNamedWindow("Original_photo",CV_WINDOW_AUTOSIZE);
    IplImage *out=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
	cvSmooth(img,out,CV_GAUSSIAN,3,3);
	/*void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN,
               int param1, int param2, double param3, double param4 );
    src:輸入圖像.
	dst:輸出圖像.
	smoothtype平滑方法:
	CV_BLUR_NO_SCALE(簡單不帶尺度變換的模糊) - -對每個象素的 param1×param2 領域求和。如果鄰域大小是變化的,可以事先利用函數 cvIntegral 計算積分圖像。
	CV_BLUR (simple blur)- -對每個象素param1×param2鄰域求和并做尺度變換 1/(param1×param2)。
	CV_GAUSSIAN(gaussian blur) - -對圖像進行核大小為 param1×param2 的高斯卷積。
	CV_MEDIAN(median blur) - -對圖像進行核大小為param1×param1 的中值濾波 (鄰域是方的)。
	CV_BILATERAL(雙向濾波) - -應用雙向 3x3 濾波,彩色 sigma=param1,空間 sigma=param2.。
    關于雙向濾波*/
	/*CV_GAUSSIAN 高斯模糊 param3為零時,高斯卷積核sigma通過以下公式計算
	sigma(x) = (n(x)/2-1)*0.30+0.80,n(x)= param1
	sigma(y) = (n(y)/2-1)*0.30+0.80,n(y)= param2
	如果第四個參數指定,則第三個和第四個參數分别表示sigma的水準方向和垂直方向的值
	如果第三個,第四個參數已經指定,而前兩個參數為0,那麼視窗的尺寸由sigma确定*/
	cvNamedWindow("Processed_photo",CV_WINDOW_AUTOSIZE);
	cvShowImage("Original_photo",img);
    cvShowImage("Processed_photo",out);
	cvWaitKey(0);
	cvDestroyWindow("Original_photo");
	cvDestroyWindow("Processed_photo");
	
	return 0;