我有一个“蒙版”图像,我需要知道它是否具有零值。我想做一些等同于:
bool HasMissingPixels(const cv::Mat& mask) {
return cv::countNonZero(image) < mask.rows * mask.cols;
}
感觉到浪费了计算,发现所有(非)零的,这是因为一旦遇到第一个零像素,它就可能返回true。另一方面,通过自己遍历像素,我失去了
OpenCV
的优化,并行化等优势。有没有一种方法可以更快地计算出来?
最佳答案
为最坏的情况进行优化(“数组中没有零值元素”)通常是有意义的,因为这样您的系统将具有可预测的运行时行为。因此,使用countNonZero
或minMaxLoc
是实现此处目标的良好功能。
提前中断的迭代方法是否可以更快地完全取决于数据(“在大多数情况下,矩阵的早期是否存在零值?”)。您不会在像OpenCV这样的库中找到这样的功能,因为库维护者不知道您的数据,也无法编写针对自定义数据分发进行优化的代码。