2

我正在使用 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 之间转换的解释。

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

4

2 回答 2

4

文档中所述

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

对于所有这些函数,都存在 C++ 接口,例如:

void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT )
于 2013-02-27T13:18:59.493 回答
1

首先,您根据需要加载图像,对我来说,我使用了:

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

据我所知,如果您想使用此功能,您需要将 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。

于 2013-02-27T14:15:19.683 回答