想要平滑cv::Mat in openv



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

如果有任何帮助,我将不胜感激。

如文档中所述:

注意:该函数现在已废弃。使用GaussianBlur(), blur(), medianBlur()或bilateralFilter()。

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

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

首先你加载你想要的图像,对于我来说,我使用:

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

相关内容

  • 没有找到相关文章

最新更新