Mar*_*us0 5 android opencv image-processing
我正在使用OpenCV来检测图像.这是我的问题:我的函数detect_image(mRgba)需要一些时间来执行操作并给出一些结果.虽然功能是计算相机预览被冻结,因为它只显示代码到达时的图像return inputFrame.rgba()我想知道如何使这些操作并行,功能将在后台计算,而相机预览正常工作.
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
detect_image(mRgba);
return inputFrame.rgba();
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*k77 10
为了尝试并行化,简单的方法是使用AsyncTask来处理您的图像:
可以在这里找到更友好的介绍:
http://android-developers.blogspot.co.il/2010/07/multithreading-for-performance.html
而这个:
http://developer.att.com/developer/forward.jsp?passedItemId=11900176
是一个很好的全面介绍Android上的多线程.
如果你想刚开始,一个简单的算法应该像这样工作:
使用此算法,如果您的系统在以60fps(例如)进行预览时每秒可以检测到4个图像,则您将能够在单个处理器设备上获得关于每个20-30帧的新结果的平滑视频,当摄像机预览/显示是I/O密集型时,detect_image是CPU密集型的现实假设.
Capture: x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x....
Processing: 1.......1.......1.......1.....1.......1....
time ------------------------------------>
从HoneyComb开始,更精细的方法是考虑CPU中的核心数量(多核手机/平板电脑变得越来越普遍)并且并行启动N AsyncTask(每个核心一个),为每个核心提供不同的预览图像一个(可能使用线程池...).
如果将每个线程分开一个固定的延迟(大约是detectImage/N的持续时间),你应该得到一个恒定的结果流,其频率应该是单线程版本的倍数.
Capture: x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x....
Processing: 1.2.3.4.1.2.3.4.1.2.3.4.1.2.3.4.1.2.3.4....
time ------------------------------------>
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
3221 次 |
| 最近记录: |