如何确定cv :: Mat是否具有零值?

时间:2018-07-23 11:00:48

标签: c++ opencv matrix

我有一个“蒙版”图像,我需要知道它是否具有零值。我想做的事情等同于:

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

感觉很浪费计算以找到所有(非)零,因为一旦遇到第一个零像素,它可能会返回true。另一方面,通过自己遍历像素,我失去了OpenCV的优化,并行化等优势。

有没有一种方法可以更快地计算出来?

1 个答案:

答案 0 :(得分:0)

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

是否尽早中断的迭代方法是否可以更快地完全取决于数据(“在大多数情况下,矩阵中的早值为零吗?”)。在像OpenCV这样的库中找不到这种功能,因为库维护者不知道您的数据,也无法编写针对自定义数据分发进行优化的代码。