Android OpenCV摄像头横竖屏问题的解决是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
成都创新互联公司是一家专注网站建设、网络营销策划、微信小程序、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十多年以来,已经为数千家iso认证各业的企业公司提供互联网服务。现在,服务的数千家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
我们在用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);
}
把上面两段加好后,我们重新打开摄像头,显示的图像就是正常的图像了.
关于Android OpenCV摄像头横竖屏问题的解决是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
网页名称:AndroidOpenCV摄像头横竖屏问题的解决是怎样的
网站URL:http://scgulin.cn/article/gopdgi.html