我在使用 Android 模拟器时遇到了一个奇怪的问题.OpenCV CameraBridgeViewBase.
使用 onCameraFrame 我得到一张看起来没有正确解码的图片.
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { return inputFrame.rgba(); }
使用 'inputFrame.gray()' 我得到了预期的结果 - 没有伪影或任何其他问题的黑白图像.
这就是我得到的:
到目前为止我已经尝试过:
- 不同的 API 级别(从 15 到 21).
- 不同的模拟器:Genymotion 和谷歌安卓模拟器.
- 不同的平台架构 - ARM 和 Intel x86.
- 在装有 Linux 的其他笔记本电脑上启动模拟器:它可以正常工作,正如预期的那样,问题消失了!
- 使用从 Play 商店下载的 OpenCV 启动应用.他们确实有效!但是:
- Different API levels (from 15 up to 21).
- Different emulators: Genymotion & Google Android emulator.
- Different platform architectures - both ARM and Intel x86.
- launching emulator on different laptop with Linux: it works as expected,the issue is gone!
- launching apps,using OpenCV,downloaded from Play Store. They DO work! However:
- 启动按预期运行的应用,然后关闭它.
- 启动您的应用(或 OpenCV 教程之一),然后关闭它.
- 再次从 5.1 启动应用程序,我发现它受到相同错误的影响!
在我真正的 Android 设备上一切正常.
查看 CameraBridgeViewBase 和 Java/Native 相机类的来源后,我决定在解码图像时出现问题.特定于平台的相机输出格式(YUV、NV21)可能存在问题.但是,奇怪的是 .gray() 给出了正确的图像(没有伪影).
如果重要的话,我正在使用带有Facetime HD"摄像头的 Mac OS X 10.10 Yosemite 和 MacBook Air.
关于如何克服这个问题的任何想法&非常感谢您帮助找到问题的根源!