0

我正在将此行与此功能一起使用,但出现错误。

filter2D(GaussKernel,conspic1,GaussKernel.depth(),split(GaussKernel,KernelAchrSplit),Point(-1,-1),0,BORDER_DEFAULT);

Kernel 和 conspic1 是 Mat 对象。我想我的内核有问题,因为我不知道任何返回它的函数。所以我使用拆分功能

这是如何使用 C++ 的函数:

void filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT );

我的错误是:

无效表达式的无效使用

4

2 回答 2

0

我要做的是从 Matlab 翻译:

GaussKernel=fspecial('gaussian',maxhw,sigma);
conspic=filter2(GaussKernel,conspic,'same'); //Gaussian snoothing in each orientation

我所做的是:

GaussianBlur(maxhw,GaussKernel,Size(0,0),1,1,BORDER_DEFAULT;
//setting 1,1 ; i m setting the Gaussian kernel standard deviation as 
//the paramether sigma in Matlab first line

filter2D(GaussKernel,conspic1,GaussKernel.depth(),split(GaussKernel,KernelAchrSplit),Point(-1,-1),0,BORDER_DEFAULT);
//I know I don t have to use split for the kernel paramether, but I suppose I have
// to use GaussKernel Mat object's kernel and I don t know how get it
于 2013-05-21T10:30:37.547 回答
0

您收到错误是因为cv::split()返回void,并且cv::filter2D()需要一个cv::Mat参数作为第四个参数。

您可以简单地通过创建一个浮点数cv::Mat并用您想要的任何值填充值来创建任意内核。一个例子:

cv::Mat kern = cv::Mat::ones(15,15, CV_32FC1)/225;

OpenCV 还提供了一些函数来计算常见的内核,例如cv::getGaussianKernel().

但是,由于看起来您想要进行高斯滤波,因此使用它可能更简单cv::GaussianBlur()

于 2013-05-20T19:23:01.313 回答