天天看点

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;