-
-
Notifications
You must be signed in to change notification settings - Fork 56.5k
NaN comparison fails on certain image sizes #16465
Copy link
Copy link
Open
Description
System information (version)
- OpenCV => 4.1.1
- Operating System / Platform => Ubuntu 18.04
- Compiler => Clang 9
Detailed description
Certain sizes of images fail when comparing for NaNs
Steps to reproduce
#include <opencv2/core.hpp>
int count_NaNs_in_image(int rows, int cols) {
cv::Mat1f test(rows, cols);
test.setTo(std::numeric_limits<float>::quiet_NaN());
cv::Mat1b is_nan = test != test;
return cv::countNonZero(is_nan);
}
int main() {
assert(16 == count_NaNs_in_image(4, 4)); // succeeds
assert(44 == count_NaNs_in_image(4, 11)); // fails with 12 NaNs found instead of 44?
return 0;
}Workaround
Invert the comparison, ie
int count_not_not_nans_in_image(int rows, int cols) {
cv::Mat1f test(rows, cols);
test.setTo(std::numeric_limits<float>::quiet_NaN());
cv::Mat1b is_not_nan = test == test;
return cv::countNonZero(255 - is_not_nan);
}Reactions are currently unavailable