我想像这个函数一样将RGB图像转换为Gray:
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。
这可能看上去不可思议,但这一小功能花费了FPS的一半。该设备仍然可以运行非常复杂的东西,如ORB以合理的速度(3-4 FPS),以及所有O(n) C++例程,而不存在FPS差异。而且仅仅是Miki的“技巧”使函数的速度快了10倍。
发布于 2015-07-13 16:11:29
没有预先构建的方法为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)先配置。简单地说,首先尝试容易编码的版本,然后一旦你知道这部分是慢的部分。也就是说,通过运行它并对其进行计时,将代码更改为更有效。
https://stackoverflow.com/questions/31380849
复制相似问题