我在这个函数中使用了这一行,但是我有一个错误。
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表达式
答案 0 :(得分: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()
可能更简单。
答案 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