温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android OpenCV摄像头横竖屏问题的解决是怎样的

发布时间:2021-12-06 11:22:41 来源:亿速云 阅读:722 作者:柒染 栏目:大数据

Android OpenCV摄像头横竖屏问题的解决是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

我们在用OpenCV自带的摄像头JavaCameraView时,开启后手机竖屏会是旋转90度的效果,非常不友好,下面的代码即可实现我们用JavaCameraView根据手机横竖屏来获取到对应的图像.

我们要修改的主要有两个地方,一个是获取实时帧的事件onCameraFrame,还有一个是OpenCV里面CameraBridgeViewBase类里的deliverAndDrawFrame方法

onCameraFrame

  • 首先把CameraBridgeViewBase.CvCameraViewFrame里的图像复制到新的Mat里.

  • 然后判断当前屏幕是横屏还是竖屏.

  • 通过判断当前是前置摄像头还是后置摄像头来改变图像旋转的角度.

  • 把旋转完后的图像再缩放至JavaCameraView组件本身的大小.

  • 输出图像

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
                //获取到显示Mat赋值给frame
                Mat frame = inputFrame.rgba();
                //判断横竖屏用于进行图像的旋转
                if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
                    //判断是前置摄像头还是后置摄像头,翻转的角度不一样
                    switch (cameraindex) {
                        case CameraBridgeViewBase.CAMERA_ID_FRONT:
                            Core.rotate(frame, frame, Core.ROTATE_90_COUNTERCLOCKWISE);
                            break;
                        case CameraBridgeViewBase.CAMERA_ID_BACK:
                            Core.rotate(frame, frame, Core.ROTATE_90_CLOCKWISE);
                            break;
                            default:
                                Core.rotate(frame, frame, Core.ROTATE_90_CLOCKWISE);
                                break;
                    }
                    //把旋转后的Mat图像根据摄像头屏幕的大小进行缩放
                    Size size = new Size(cameraView.getWidth(), cameraView.getHeight());
                    Imgproc.resize(frame, frame, size);
                }
                return frame;
            }

CameraBridgeViewBase

在CameraBridgeViewBase类里找到deliverAndDrawFrame方法

Android OpenCV摄像头横竖屏问题的解决是怎样的

在catch后面加上

//此处修改如果不对的话释放图片再重新根据大小进行创建
                if (mCacheBitmap != null) {
                    mCacheBitmap.recycle();
                    mCacheBitmap = Bitmap.createBitmap(modified.width(), modified.height(), Bitmap.Config.ARGB_8888);
                }


把上面两段加好后,我们重新打开摄像头,显示的图像就是正常的图像了.

关于Android OpenCV摄像头横竖屏问题的解决是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI