在opencv中应用过滤时出错

时间:2013-10-25 07:36:20

标签: c++ opencv

我在c ++和opencv中有一个非常基本的问题。 我想在我的图像中应用双边滤镜,但是我收到此错误,表明我没有分配内存!

“0x7620c41f处的未处理异常”

现在这是我的问题: 即使我没有定义任何指针,我应该分配内存吗?

for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){
    bilateralFilter ( result, dst, i, i*2, i/2 );
}

这是结果类型和dst,它们都定义为Mat ...

cv::Mat result = Mat(height, width, CV_32FC1, distances);
cv::Mat dst = Mat(height,width, CV_32FC1, distances);

当我调试它时,我将红点放入行中,当我进入下一行时,我得到错误:(

抱歉,我的问题是基本的,并提前感谢。

1 个答案:

答案 0 :(得分:1)

对不起,您没有正确调用函数cv::bilateralFilter()

根据现有文档,原型是:

void cv::bilateralFilter(InputArray src, OutputArray dst, int d, 
                         double sigmaColor, double sigmaSpace)

附加条件src是8位,1或3通道图像,dstsrc具有相同的类型和大小。

在您提供的代码中,存在以下几个问题:

  • src(您的变量result)似乎没有使用任何图像数据进行初始化(但这可能是一个问题工件)
  • 您的src矩阵是32位,1通道图像,而不是8位,1通道。您需要事先将矩阵转换为正确的数据类型,例如result.convertTo(src, CV_8U, aProperScalingFactor);。需要缩放因子以确保您具有[0,255];
  • 范围内的8位数据
  • 正如@berak在评论中指出的那样,你试图定义两个共享相同底层数据存储的矩阵。 fnction cv::bilateralFilter()的行为并未提及就地处理能力。