我使用的是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之间进行转换的解释。
对此的任何帮助将不胜感激。
答案 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。