前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android OpenCV摄像头横竖屏问题解决

Android OpenCV摄像头横竖屏问题解决

作者头像
Vaccae
发布2019-07-24 11:26:16
2.3K0
发布2019-07-24 11:26:16
举报
文章被收录于专栏:微卡智享微卡智享

我们在用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方法

在catch后面加上

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


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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档