过滤OpenCV Mat以获取NAN值

tml*_*len 3 c++ opencv nan mat

有没有直接的方法来创建一个掩码,其中a中的值cv::Mat_<double>与NAN进行比较?

cv::Mat_<real> mat = ...
cv::Mat_<uchar> mask = (mat == NAN);
Run Code Online (Sandbox Code Playgroud)

不起作用因为f == NAN总是假的,即使f被分配了NAN.isnan()矩阵似乎没有过载.

ray*_*ica 7

如用户pSoLT所述,如果要确定哪些值NaN,只需将矩阵与自身进行比较即可.对于那些不相等的元素,那些将被视为NaN 标准定义.您可以使用该逻辑创建新掩码:

cv::Mat mask = cv::Mat(mat != mat);
Run Code Online (Sandbox Code Playgroud)

mat这里将是一个包含NaN值的矩阵,并且mask将是一个CV_8UC1(即uchar)类型矩阵,每个元素都是0xFF一个值NaN,0x00否则就是一个值.

这篇关于OpenCV论坛的帖子也可以提供帮助:http://answers.opencv.org/question/2221/create-a-mask-for-nan-cells/

  • OpenCV 中存在一个错误,导致此操作导致行为不一致。请参阅https://github.com/opencv/opencv/issues/16465 (2认同)
  • 绝对知道这一点@AndrewMarshall。patchNAN 正是出于这个原因而被引入的。这里已经有一个答案,但我会更新我的答案以结束。我只是没有时间......考虑到目前正在发生的事情! (2认同)