访问像素并检查是否为inf像素

时间:2018-03-14 09:21:51

标签: c++ opencv

我在网上搜索过,并没有找到解决问题的好方法。所以这是我的问题:  我正在使用OpenCV并且有一个名为replaceInvalidDisparties的函数,我必须搜索像素并检查实际值是否为inf并且OpenCv中有一个名为{{1}的标准函数检查值是否为cvIsInf(double value),但不知怎的,我总是得到分段错误。

inf

但不知怎的,它总是给我一个分段错误。有谁知道这个问题?

2 个答案:

答案 0 :(得分:0)

第一个问题,我看到你不使用cvIsInf函数的返回值。根据opencv docs:https://docs.opencv.org/3.1.0/db/de0/group__core__utils.html#gae04046b1211c77ff19a535bd78c15964,如果参数是正或负无穷大(由IEEE754标准定义),则函数返回1,否则返回0。

所以,您应该将循环内部的代码替换为smth,如下所示:

if (cvIsInf(output.at<double>(i,j))) {
  output.at<double>(i,j) = new_value;
}

第二个问题是你没有从函数返回输出矩阵:

return output;

答案 1 :(得分:0)

首先,确保您确实返回了一个值。不返回值是未定义的行为:Is a return statement mandatory for C++ functions that do not return void?

其他功能似乎不是导致分段错误的原因,我建议改变

cv::Mat output = orignal_disp.clone();

cv::Mat output(100, 100, CV_64F);

只是为了确保你的矩阵不是格式错误。 (要发表评论;没有足够的声誉。)