我在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);
当我调试它时,我将红点放入行中,当我进入下一行时,我得到错误:(
抱歉,我的问题是基本的,并提前感谢。答案 0 :(得分:1)
对不起,您没有正确调用函数cv::bilateralFilter()
。
根据现有文档,原型是:
void cv::bilateralFilter(InputArray src, OutputArray dst, int d,
double sigmaColor, double sigmaSpace)
附加条件src
是8位,1或3通道图像,dst
与src
具有相同的类型和大小。
在您提供的代码中,存在以下几个问题:
src
(您的变量result
)似乎没有使用任何图像数据进行初始化(但这可能是一个问题工件)src
矩阵是32位,1通道图像,而不是8位,1通道。您需要事先将矩阵转换为正确的数据类型,例如result.convertTo(src, CV_8U, aProperScalingFactor);
。需要缩放因子以确保您具有[0,255]; cv::bilateralFilter()
的行为并未提及就地处理能力。