Gaussian filter(CV_GAUSSIAN),虽然它不是最快的,但是它是最有用的滤波器。高斯滤波用卷积核与输入图像的每个点进行卷积,将最终计算结果之和作为输出图像的像素值。
对于高斯模糊,前两个参数代表滤波器窗口的宽度和高度,可选择的第三个参数代表高斯卷积核的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值。
高斯滤波的opencv的实现还为几个常见的核提供更高的性能优化。具有标准sigma值的3*3,5*5,和7*7比其他核具有更优的性能。高斯模糊支持单个通道或者三个通道的8位或32位的浮点格式图像,可以进行in place方式操作。
void cvSmooth( const CvArr* src,
CvArr* dst,
int smoothtype=CV_GAUSSIAN,
int param1=3,
int param2=0,
double param3=0 ,
double param4=0);
代码:
#include <cv.h>
#include <highgui.h>
int main(int argc, char* argv[])
{
IplImage*input=cvLoadImage("f.jpg");
cvNamedWindow("yuantu",CV_WINDOW_AUTOSIZE);
cvShowImage("yuantu",input);
IplImage*out_a_img=cvCreateImage(cvGetSize(input),input->depth,input->nChannels);