2017-01-20 18 views
2

Есть ли прямой способ создания маски, где значения в cv::Mat_<double> сравниваются с NAN?Фильтр OpenCV Mat для значений NAN

cv::Mat_<real> mat = ... 
cv::Mat_<uchar> mask = (mat == NAN); 

не работает, потому что f == NAN всегда ложно, даже если f был назначен NAN. И, кажется, нет никакой перегрузки isnan() для матриц.

ответ

4

Как отметил пользователь pSoLT, если вы хотите определить, какие значения NaN, просто сравните матрицу с самим собой. Для тех элементов, которые не равны, они будут считаться NaNby the standard definition. Вы можете создать новую маску, используя эту логику:

cv::Mat mask = cv::Mat(mat != mat); 

mat здесь будет матрицей, которая содержит NaN значения и mask будет CV_8UC1 (т.е. uchar) типа матрицы с каждым элементом является 0xFF, если значение NaN и 0x00 в противном случае.

Этот пост на форумах OpenCV также может помочь: http://answers.opencv.org/question/2221/create-a-mask-for-nan-cells/

1

Если вы хотите проверить значение для NaN, просто сравните его с собой. В соответствии со стандартом NaN не равен никакому другому номеру, в том числе сам по себе (fValue != fValue) должен быть правдой для NaN.

 Смежные вопросы

  • Нет связанных вопросов^_^