想要在opencv中平滑cv :: Mat

时间:2013-02-27 13:02:15

标签: c++ opencv

我使用的是OpenCV 2.3.1。

我有一个cv :: Mat图像,我想应用平滑滤镜。不幸的是,我发现的所有代码都是

void cvSmooth(const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int size1=3, int size2=0, double sigma1=0, double sigma2=0 );

使用CvArr而不是cv :: Mat。我找不到关于如何在cv :: Mat和CvArr之间进行转换的解释。

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

如上所述in the docs

  

注意:该功能现已过时。使用GaussianBlur()blur()medianBlur()bilateralFilter()

对于所有这些功能,存在C ++接口,例如:

void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT )

答案 1 :(得分:0)

首先你按照自己的意愿加载图像,对我来说,我用过:

image = cvLoadImage("6mtEy.jpg");

据我所知,如果您想使用此功能,您的gona需要将您的Mat转换为cvArr(我的代码中的IplImage):

IplImage tmp = image;

然后您创建与第一张图片大小相同的目标图片:

IplImage *dst;
dst = cvCreateImage(cvSize(tmp.width, tmp.height), tmp.depth, tmp.nChannels);

然后你使用你的功能:

cvSmooth(&tmp, dst, CV_GAUSSIAN, 1);

最后你把结果放回垫子里了:

image = dst;

不要忘记销毁你创建的IplImages。