cover.jpg

在开始加界面按钮的时候,发现一个别扭的问题,竖屏下摄像头会旋转90度。在之前的文章中,默认的布局形式是横屏的,可以看到在AndroidManifest.xml文件中,关于屏幕方向是这么写的:

android:name=".MainActivity"

android:screenOrientation="landescape"//横屏

android:configChanges="keyboardHidden|orientation"

android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" />

这没什么问题,官方教程例子也是横屏的。

但是,当在界面上加上自己的按钮的时候,默认也是横屏排列的,如下:

1.jpg

这样感觉不太对劲,即使手机竖过来,图标也还是不动的,而且平时的使用习惯也是竖着比较方便,于是我改了android:screenOrientation="landescape"

修改为android:screenOrientation=" portrait"

这下按钮位置对了,但是画面不对了,见下图:

2.jpg

显示的画面不但没有全屏,而且方向还不对,看起来好像向左旋了90度。

这可能与我的小米手机有关,也可能与OpenCV图像获取有关。不过也不能确定,毕竟我没有在其他机型上测试过。但是我在网上搜到其他人也碰到过这个问题。经过各种尝试,最后终于搞清楚,这个跟android的图像采集原理有关,具体到OpenCV这里,需要改图像获取的模块,在SDK里面。

出现这个问题的原理在这里,参考了这个问题的回复。我试出来最可靠的做法是:修改CameraBridgeViewBase.cpp中的deliverAndDrawFrame函数,只要让采集的图像变正就可以了。修改后的部分如下:protected void deliverAndDrawFrame(CvCameraViewFrame frame) {

Mat modified;    if (mListener != null) {

modified = mListener.onCameraFrame(frame);

} else {

modified = frame.rgba();

}    boolean bmpValid = true;    if (modified != null) {        try {

Utils.matToBitmap(modified, mCacheBitmap);

} catch(Exception e) {

Log.e(TAG, "Mat type: " + modified);

Log.e(TAG, "Bitmap type: " + mCacheBitmap.getWidth() + "*" + mCacheBitmap.getHeight());

Log.e(TAG, "Utils.matToBitmap() throws an exception: " + e.getMessage());

bmpValid = false;

}

}    if (bmpValid && mCacheBitmap != null) {

Canvas canvas = getHolder().lockCanvas();        if (canvas != null) {

canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);            if (BuildConfig.DEBUG)

Log.d(TAG, "mStretch value: " + mScale);           // ===修改这里解决预览旋转90度问题

canvas.rotate(90,0,0);            float scale = canvas.getWidth() / (float)mCacheBitmap.getHeight();            float scale2 = canvas.getHeight() / (float)mCacheBitmap.getWidth();            if(scale2 > scale){

scale = scale2;

}            if (scale != 0) {

canvas.scale(scale, scale,0,0);

}

canvas.drawBitmap(mCacheBitmap, 0, -mCacheBitmap.getHeight(), null);            // ===结束这里解决预览旋转90度问题end

if (mFpsMeter != null) {

mFpsMeter.measure();

mFpsMeter.draw(canvas, 20, 30);

}

getHolder().unlockCanvasAndPost(canvas);

}

}

}

再运行试试,终于正常了:

3.jpg

如果点切换相机,前置摄像头画面也正常了。

此处没有截前置相机的画面(哈哈),切换相机的实验,见前文的说明。

作者:晚晴风_

链接:https://www.jianshu.com/p/bd041bf5169f

android 摄像头画面竖,OpenCV for Android(5):竖屏摄像头旋转问题相关推荐

  1. java基于安卓的人脸识别_基于android studio开发的 opencv关于android人脸识别的DEMO

    (2018年11月23日 在 链接 补充了一个新的BUG) 一个新项目的导入 可能会遇到多个问题,就这些问题 做个 解决集合,以便日后回顾, 版本 : android studio3.1.4 ,ope ...

  2. Android NDK开发之 opencv for android 问题总结

    http://blog.csdn.net/wendy260310/article/details/16335729

  3. java捕捉摄像头画面_在java中捕获来自网络摄像头的图像?

    一只萌萌小番薯 这个JavaCV实现工作正常.码:import org.bytedeco.javacv.*;import static org.bytedeco.javacpp.opencv_core ...

  4. 在Android Studio上进行OpenCV 3.1开发

    在Android Studio上进行OpenCV 3.1开发 发布于 2016年1月27日 作者: John Hany 5,466次阅读 2016.07.08更新:增加Android Studio 2 ...

  5. 安装目录opencv for android 教程(环境搭建篇)

    这几周朋友几篇文章介绍了改安装目录的文章. 关联文章的地址 最近android开发异常炽热,随着手机性能越来越高,图像处程序也越来越重要, 由于opencv for android 网上教程大多为英文 ...

  6. 【Android探索】基于OpenCV的微液滴粒径分析APP

    前言:这个App是之前<数字图像处理>课程的一次课程设计中的产物,现在整理一下记录下来,里面涉及到了比较多的控件以及拓展包,功能不是很丰富但是也比较算齐全,其中使用的技术原理包括在安卓上使 ...

  7. 基于opencv与android的手机远程监控

    前言:最近搞了一下andriod和socket网络通信,结合之前搞得opencv,立即有了一个把三者结合起来的想法.好了,搞吧.所以搞出来一个远程监控,功能就是把电脑的摄像头数据传到手机上. 环境:V ...

  8. opencv android安装教程,opencv for android安装教程.doc

    opencv for android安装教程 前言: ? ?最近android开发异常火热,随着手机性能越来越高,图像处程序也越来越重要, 由于opencv for android 网上教程大多为英文 ...

  9. 图说Android开机画面和开机动画

    转载请注明出处 电脑报( http://www.icpcw.com )        2009年第42期C版 责任编辑:   郭昱     作者 屈志伟 诺基亚.微软.苹果大战智能手机平台,巨头Goo ...

最新文章

  1. net.sf.json.JSONObject 和org.json.JSONObject 的差别
  2. js使用ajax发送post json,javascript-如何用ajaxpost复杂json数据
  3. java 显示日历_JAVA显示日历(已知年和该年第一天为星期几)
  4. 【视频课】Pytorch模型分析进阶(可视化,参数量与计算量,计算速度)
  5. 删除Autorun.inf的方法
  6. 第三周作业-实现随机点名的签到程序
  7. linux 终端 reboot,讲解Linux基础命令之:man、reboot
  8. 心理测试单机小软件,成人心理测评系统(单机版)
  9. 使用小波包变换分析信号的matlab程序,使用小波包变换分析信号的MATLAB程序
  10. 程序员吃饭段子Java吃完就走_爆笑段子:一朋友是个程序员,有一次和他吃饭,他愁眉苦脸的说...
  11. 汇金蛛:推荐在家0成本,有营养的副业兼职
  12. 斯坦福21秋季:实用机器学习-李沐课程笔记
  13. python之使用plt笔记
  14. Bob 的生存概率问题
  15. 真是经典中的经典!Android面试你必须要知道的那些知识,震撼来袭免费下载!
  16. 神童频现,这到底是人性的扭曲还是?
  17. 2021-你需要知道的前端网络知识-http
  18. 论文查重,有什么免费软件可以自建本地比对库,然后进行查重?
  19. Unity 在web上材质显示正常,但是unity端材质显示为紫色
  20. 虚幻引擎图文笔记:项目升级到虚幻5(UE5.0.1)以后出现奇怪阴影问题的解决办法

热门文章

  1. Simple: SQLite3 结巴分词插件
  2. VMware中配置NAT方式上网 by.zyw
  3. 小程序社交类目需要上传《非经营性互联网信息服务备案核准》,什么是《非经营性互联网信息服务备案核准》?
  4. 简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)
  5. 【ESP32_8266_BT篇(二)】Beacon信标广播
  6. 2022-2028全球及中国免下车洗车系统行业研究及十四五规划分析报告
  7. 【xcode】Xcode常用快捷键与技巧
  8. MySQL学习笔记——第2章 SQL的基本概念和MySQL简介
  9. 第五章 向邮件添加附件
  10. 如何通过home brew安装MongoDB macOS