一開始做圖像處理都是一個函數塊一個函數塊實作,通過學習才發現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;