filter2D openCV函数错误

时间:2013-05-20 13:11:31

标签: c# matlab opencv cat

我在这个函数中使用了这一行,但是我有一个错误。

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

内核和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 );

我遇到的错误是:

无效使用void表达式

2 个答案:

答案 0 :(得分:0)

您收到错误是因为cv::split()返回voidcv::filter2D()期望cv::Mat参数作为第四个参数。

您可以通过创建浮点cv::Mat并使用您希望的任何值填充值来创建任意内核。一个例子:

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

OpenCV还提供了一些计算公共内核的函数,例如cv::getGaussianKernel()

但是,由于您希望进行高斯过滤,因此使用cv::GaussianBlur()可能更简单。

答案 1 :(得分: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