我有一张灰度图片,我只想将其转换为黑白。但为此,我需要计算正确的阈值,并且我希望该阈值等于图片的平均亮度。
所以,我想知道如何使用 OpenCV 计算该阈值。框架中是否存在一种方法可以轻松做到这一点?
我想为每个像素添加每个亮度值(0 到 255 之间),然后将总和除以像素本身的数量,但是我发现访问这些数据的方法非常慢(.at(i,j)[ k] 用于 RGB 图片)。但是我的图片是灰度的,我希望它很快,所以它可以在 iPhone 上运行。
我有一张灰度图片,我只想将其转换为黑白。但为此,我需要计算正确的阈值,并且我希望该阈值等于图片的平均亮度。
所以,我想知道如何使用 OpenCV 计算该阈值。框架中是否存在一种方法可以轻松做到这一点?
我想为每个像素添加每个亮度值(0 到 255 之间),然后将总和除以像素本身的数量,但是我发现访问这些数据的方法非常慢(.at(i,j)[ k] 用于 RGB 图片)。但是我的图片是灰度的,我希望它很快,所以它可以在 iPhone 上运行。
要计算这些统计数据,请使用cv::sum()
,甚至更好,cv::mean()
。
然而,OpenCV 已经有一个阈值函数,可以为你做所有你想做的事情: cv::adaptiveThreshold()
此外,您应该查看 Otsu 的方法,请参阅cv::threshold()
选项THRESH_OTSU
。
您可以使用 Monte Carlo 算法,对随机点而不是所有图像点进行采样,直到覆盖了 1% 的图像。结果应该与实际值非常相似。