我使用的是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