美文网首页
Opencv Android 摄像头问题

Opencv Android 摄像头问题

作者: Sand哥 | 来源:发表于2019-10-09 13:45 被阅读0次

    在某些设备上调用Opencv 摄像头的时候可能会报如下错误


    It seems that you device does not support camera (or it is locked). Application will be closed.


    报这个错可能会有两个原因

    原因1. 可能是权限问题,这个很好解决,加个动态权限申请就好了

    原因2.这个原因很不好找,debug 的时候跟踪到 startPreview 的时候直接崩溃了,也没有什么有用的Log 信息,但是我在测试的过程中发现虽然后置摄像头一打开就崩溃,但是前置摄像头却能正常工作,经过测试又发现如果要想后置摄像头正常工作必须更改org.opencv.android.JavaCameraView 的大小(不用match_parent,指定一个较小的宽搞),不要让这个View铺满全屏,或者在JavaCameraView的父容器上加padding 这样后置摄像头也能正常工作了。经过仔细debug,我找到了最终的原因,我发现我用的一款设备去调用摄像头的时候经过opencv计算之后选了一个最大的可用分辨率(1920x1114,这个大小会受到JavaCameraView大小影响,见源码),然而我的这个设备并不能支持这个分辨率,或者更大的分辨率。所以在这种情况下需要手动处理一下,不能让预览高度超过1080 就OK了。


    具体做法:

    在org.opencv.android.CameraBridgeViewBase类中calculateCameraFrameSize方法中添加一行代码,修改calcHeight超过1080的时候,设置为1080,就可以解决这种问题(最大限制要看设备)。

    也是因为这个原因,所以前置摄像头能正常工作,我的前置摄像头去打开的相机的时候分辨率是1280X720,硬件是支持这个分辨率,所以能正常工作。前面提到过,后置摄像头如果也需要正常工作的话,必须修改JavaCameraView 的大小,因为最终的分辨率的选择会受到JavaCameraView的大小影响,把JavaCameraView大小变小,最后就不会用最大的分辨率打开相机(不改会用1920X1080,改小之后会用1280X720),这样硬件刚好就支持这个分辨率也能正常工作了。

    完整可运行的代码见:https://github.com/woshiwzy/opencv_android

    百度云盘:https://pan.baidu.com/s/1TaVu5_Vpp2psiXVI9bidgw

    相关文章

      网友评论

          本文标题:Opencv Android 摄像头问题

          本文链接:https://www.haomeiwen.com/subject/fstgpctx.html