【问题标题】:How to determine if a cv::Mat has any zero values?如何确定 cv::Mat 是否有任何零值?
【发布时间】:2018-07-23 11:00:48
【问题描述】:

我有一个“面具”图像,我需要知道它是否有任何零值。我想做一些相当于:

bool HasMissingPixels(const cv::Mat& mask) {
     return cv::countNonZero(image) < mask.rows * mask.cols;
}

感觉找到所有(非)零点就像在浪费计算,因为它可以在遇到第一个零像素时立即返回真。另一方面,通过自己迭代像素,我失去了OpenCV 的优化、并行化等优势。

有没有办法更快地计算?

【问题讨论】:

  • 如何调整countNonZero的opencv代码并用openCV正确编译?应该给你同样的优化。我不知道类似“cv::hasZeroValues”的函数,但也许这只是缺乏知识:)
  • “感觉就像......”请在做出假设之前先介绍一下
  • @Miki - 真的! :)

标签: c++ opencv matrix


【解决方案1】:

针对最坏的情况(“数组中没有零值元素”)进行优化通常是有意义的,因为这样您的系统将具有可预测的运行时行为。因此使用countNonZerominMaxLoc 是实现目标的好函数。

提前中断的迭代方法是否更快完全取决于数据(“在大多数情况下,矩阵的早期是否存在零值?”)。您会在 OpenCV 之类的库中发现没有这样的功能,因为库维护者不知道您的数据,也无法编写针对您的自定义数据分布进行优化的代码。

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2015-02-10
    • 2019-04-19
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多