Skip to content

NaN comparison fails on certain image sizes #16465

@planetmarshall

Description

@planetmarshall
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);
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions