一开始做图像处理都是一个函数块一个函数块实现,通过学习才发现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;