filter2D openCV函数错误

本文关键字:错误 函数 openCV filter2D | 更新日期: 2023-09-27 18:14:41

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

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

Kernel和1是Mat对象。我想我有一个问题与内核,因为我不知道任何函数返回给我。所以我使用split function

下面是c++中如何使用这个函数:
void filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT );

我得到的错误是:

无效使用void表达式

filter2D openCV函数错误

您收到错误,因为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()

我要做的是从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