java – 如何强制Android摄像头以纵向模式显示,或者让我进行旋转
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何强制Android摄像头以纵向模式显示,或者让我进行旋转,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2626字,纯文字阅读大概需要4分钟。
内容图文
![java – 如何强制Android摄像头以纵向模式显示,或者让我进行旋转](/upload/InfoBanner/zyjiaocheng/767/dc9f0f16308a44ca8107aa0bda5f4bd5.jpg)
我是新来的发帖所以请你好!我几乎看到了与此相关的所有其他问题并尝试了最多,但我完全感到沮丧.我只想让我的Android手机以纵向模式显示相机,而不是风景.我只是修改opencv提供的ImageManipulations示例.
我使用的是opencv 3.01,Android sdk 23版,Android Studio 2.0和带有Android版6.0.1的Nexus 5手机.这是2016年4月28日,这几乎是所有东西最新的稳定版本.
我已经在AndroidManifest.xml文件中强制应用程序进入纵向模式:
android:screenOrientation="portrait"
并且整个应用程序在纵向模式下正确显示,但显示的摄像机图像旋转90度.换句话说,如果您将头部向左倾斜90度,您将看到合适的图像.所以我需要将图像向右旋转.
我尝试使用opencv Tutorial3代码和setDisplayOrientation(90):
public void setResolution(Size resolution) {
disconnectCamera();
mMaxHeight = resolution.height;
mMaxWidth = resolution.width;
// mCamera.setDisplayOrientation(90); //* Crashes if placed here
connectCamera(getWidth(), getHeight());
mCamera.setDisplayOrientation(90); //* Doesn't crash if here, but doesn't work either
}
那不起作用.在任何情况下,本教程都使用在Android版本21中弃用的“camera”类,并替换为“camera2”类.我没有更进一步,因为我想使用最新的API,但也许camera2中的东西可以工作?
有些人发布了使用“转置”和“翻转”功能来旋转图像,我尝试在onCameraFrame方法中做了很多这样的事情:
原创,作品,但轮换:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat rgba = inputFrame.rgba();
... do stuff to the image ...
return rgba;
图像显示变暗,我的FPS计算变为零(奇怪)::
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat rgba = inputFrame.rgba();
// Rotate clockwise 90 degrees
Core.transpose(rgba, rgba);
Core.flip(rgba, rgba, 1);
... do stuff to the image ...
return rgba;
再次旋转180度和视频显示,现在翻转,但仍然是横向模式:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat rgba = inputFrame.rgba();
// Rotate clockwise 90 degrees, then 90 degrees again
Core.transpose(rgba, rgba);
Core.flip(rgba, rgba, 1);
Core.transpose(rgba, rgba);
Core.flip(rgba, rgba, 1);
... do stuff to the image ...
return rgba;
因此,如果onCameraFrame返回与原始分辨率不同的Mat,则显示为空白.关于onCameraFrame的文档是粗略的 – 所以,这是真的吗?
在调用onCameraFrame之前,还有另一个我应该尝试进行此图像旋转的地方吗?有没有其他方法可以简单地强制相机以纵向模式提供相框?
解决方法:
setDisplayOrientation适用于相机的标准预览输出(直接连接到camear的SurfaceView或TextureView),但OpenCV位于此处,并且接收数据的方式不受setDisplayOrientation的影响.
转置将改变图像数组的尺寸,除非样本的其余部分知道如何处理这个,否则你会遇到问题.您必须跟踪代码以查看有关缓冲区大小的假设(例如,绘制到UI的输出缓冲区),并相应地更新它们,使其成为您插入转置点之后的转置大小.
理想情况下,有一些方法可以在OpenCV绘制的输出视图上设置方向,但我不太了解OpenCV的样本是否存在这样的控件.
内容总结
以上是互联网集市为您收集整理的java – 如何强制Android摄像头以纵向模式显示,或者让我进行旋转全部内容,希望文章能够帮你解决java – 如何强制Android摄像头以纵向模式显示,或者让我进行旋转所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。