【问题标题】:Declare a cv::Mat of NaN声明一个 NaN 的 cv::Mat
【发布时间】:2015-03-04 11:41:46
【问题描述】:

在 OpenCV 中,我试图声明一个 cv::Mat 并使用 NaN 值对其进行初始化。有点类似于:

myMat = Mat(nrows, ncols, CV_8UC1, cv::Scalar(0));

但我想要 NaN 而不是 0。我怎样才能做到这一点?我应该为 NaN 值设置什么类型?

【问题讨论】:

  • 除了问题之外,没有可移植的方式来表达 NaN(它取决于编译器),uchar 只能保存 [0..255] 范围内的值,并且它们都是有效的。
  • 请问你为什么要做这样的事情?

标签: c++ opencv image-processing nan mat


【解决方案1】:

整数类型没有 NaN,但根据您的 C++ 编译器,您可能会使用带有 floatdouble 数据(CV_32FCV_64F)的 NaN。使用std::numeric_limits<T>::has_quiet_NaN()检查类型T是否有NaN值,然后std::numeric_limits<T>::quiet_NaN()获取值。

double dNaN = std::numeric_limits<double>::quiet_NaN();
cv::Mat myMat = Mat(nrows, ncols, CV_64F, cv::Scalar(dNaN));

【讨论】:

  • @user2121792 如果这在您的情况下成功或正确,您能接受答案吗?如果您追求不同的东西,请随时添加详细信息。谢谢! :)
  • 很酷,但仅适用于浮点类型,不适用于 uchar 版本,最初的问题是关于
  • @berak 是的,这就是我编辑答案的原因。我意识到我没有明确指出这一点(正如您最初评论的那样,整数类型没有特殊值)。我想,有时答案是“你不能”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多