java使用OpenCV中我自己的公式将RGB转换为灰色
我想将RGB图像转换为灰色,就像此函数所做的那样:
Imgproc.cvtColor(mRgba, mGrey, Imgproc.COLOR_RGBA2GRAY);
但是openCV使用了一个特定的公式(我想是0.299*R+0.587*G+0.114*B),我想用min(R,G,B)代替
有没有一种性能高效的方法可以做到这一点?(这是适用于安卓的OpenCV,Java也是如此)
编辑:
下面是分析,我肯定应该早点做:
拍摄相机的基本应用程序以每秒12帧的速度运行
- 使用OpenCV的cvtColor():12 FPS(速度差异很小)
- 马克·米勒的回答是:1.5 FPS
- 使用Mark Miller的答案和Miki的优化(获取一次数据指针):7 FPS
这看起来很不可思议,但仅仅是一个小小的功能就花费了FPS的一半。该设备还可以运行非常复杂的东西,比如ORB,在适当的速率(3-4个FPS),所有的O(n)C++例程没有FPS的差异。此外,Miki的“技巧”使函数速度提高了10倍
# 1 楼答案
没有预先构建的方法可以为OpenCV提供任意函数来转换为灰度。剩下的选项是使用RGB通道本身
正如您所提到的,它可能太慢了,尤其是对于大型图像和来自if语句的分支。然而,优化有三条规则:(1)不要这样做,(2)现在还不要这样做,(3)先分析。简单地说,首先尝试易于编码的版本,然后一旦你知道这一部分是缓慢的部分(即,通过运行它并对其计时),更改代码以提高效率