我在网上搜索过,并没有找到解决问题的好方法。所以这是我的问题:
我正在使用OpenCV并且有一个名为replaceInvalidDisparties
的函数,我必须搜索像素并检查实际值是否为inf
并且OpenCv
中有一个名为{{1}的标准函数检查值是否为cvIsInf(double value)
,但不知怎的,我总是得到分段错误。
inf
但不知怎的,它总是给我一个分段错误。有谁知道这个问题?
答案 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);
只是为了确保你的矩阵不是格式错误。 (要发表评论;没有足够的声誉。)