将RGB转换为灰色与我自己的公式在OpenCV



我想将RGB图像转换为灰色,就像这个函数一样:

Imgproc.cvtColor(mRgba, mGrey, Imgproc.COLOR_RGBA2GRAY);

但是openCV使用一个特定的公式(0.299*R + 0.587*G + 0.114*B我想?),我想用min(R,G,B)代替。

是否有一种高效的方法来做到这一点?(这是android的OpenCV,所以与Java)

编辑:

这是分析,我肯定应该早点做:

基本应用程序捕捉相机运行在12 FPS

  • 与OpenCV的cvtColor(): 12 FPS(速度差异是微不足道的)
  • 与Mark Miller的回答:1.5 FPS
  • 与Mark Miller的答案和Miki的优化(获得数据指针一次):7 FPS

这可能看起来不可思议,但仅仅是这个小功能就花费了一半的FPS。该设备还可以运行非常复杂的东西,如ORB,以体面的速率(3-4帧/秒),以及所有没有FPS差异的O(n) c++例程。还有就是Miki的"技巧"让这个函数的运行速度快了10倍。

没有预先构建的方法来给OpenCV一个任意的函数来转换为灰度。剩下的选项是使用RGB通道本身。

for (int x = 0; x < mRgba.cols(); x++)
{
    for (int y = 0; y < mRgba.rows(); y++)
    {
        double[] rgb = mRgba.get(x, y);
        mGray.put(x, y, Math.min(rgb[0], Math.min(rgb[1], rgb[2])));
    }
}

正如您所提到的,它可能太慢了,特别是对于大图像和来自if语句的分支。然而,有三个优化规则:(1)不要这样做,(2)暂时不要这样做,(3)首先配置文件。简单地说,首先尝试易于编码的版本,然后一旦你知道这部分是慢的部分[1]。E,通过运行它并计时],更改代码以提高效率。

相关内容

  • 没有找到相关文章

最新更新