But the calculation is still way too slow, so I need to find another
method to reduce input video stream qualllity.
这个问题的真正答案更接近于“你没有太多可以做的!”比别的东西我们必须承认,手机没有像任何桌面一样强大的处理能力。世界上大多数Android手机仍然使用以前版本的系统,最重要的是:它们是单核设备,它们的速度低于1GHz,内存有限,bla bla …
然而,总是有一些事情可以做,以提高速度,性能几乎没有变化。
现在,我还在GalaxyS上计算OpenCV SURF,我的帧速率为1.5 fps,200个功能,在一个320×240的图像中,在1500点的粗糙度阈值为1500。我承认这是令人沮丧的表现,但在我的情况下,我只需要一次计算功能,因为我正在测量光流以进行跟踪。但是,您每4-5秒只能获得1帧,这是非常奇怪的。
1)首先,在我看来,你正在使用VideoCapture获取相机帧。嗯,我不是我正在使用Android相机实现。我没有检查如何在OpenCV的Java端口中实现VideoCapture,但它似乎比在某些教程中使用实现慢。但是,由于我没有测试,我不能100%肯定。你是否?
2)尽量减少本机呼叫。 Java OpenCV本机调用是耗时的。此外,请遵循Android-OpenCV best practices page中指定的所有准则。如果您有多个本机呼叫,请将它们全部连入一个JNI呼叫。
3)您还应该减小图像大小并增加SURF粗体阈值。