首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenCV中用我自己的公式将RGB转换成灰色

在OpenCV中用我自己的公式将RGB转换成灰色
EN

Stack Overflow用户
提问于 2015-07-13 10:24:41
回答 1查看 1.3K关注 0票数 0

我想像这个函数一样将RGB图像转换为Gray:

代码语言:javascript
复制
Imgproc.cvtColor(mRgba, mGrey, Imgproc.COLOR_RGBA2GRAY);

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

有什么高效的方法吗?(这是安卓的OpenCV,Java也是如此)

编辑:

下面是我应该早点做的分析:

捕捉相机的基本应用程序运行于12 FPS。

  • 使用OpenCV的cvtColor():12 FPS (速度差异不大)
  • 与马克·米勒的回答:1.5FPS
  • 使用Miller的答案和Miki的优化(获取数据指针一次):7 FPS

这可能看上去不可思议,但这一小功能花费了FPS的一半。该设备仍然可以运行非常复杂的东西,如ORB以合理的速度(3-4 FPS),以及所有O(n) C++例程,而不存在FPS差异。而且仅仅是Miki的“技巧”使函数的速度快了10倍。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-13 16:11:29

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31380849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档