4-1.Android Camera 之 CameraInfo 编码模板(前后置摄像头理解、摄像头图像的自然方向理解)

一、Camera.CameraInfo

  • Camera.CameraInfo 是用于获取设备上摄像头信息的一个类,它提供摄像头的各种详细信息,例如,摄像头的方向、是否支持闪光灯等,以下是它的常用属性
  1. static int CAMERA_FACING_BACK:表示设备的后置摄像头,手机背后的

  2. static int CAMERA_FACING_FRONT:表示设备的前置摄像头,手机屏幕上的

  3. int facing:表示摄像头镜头的方向,它的值可能是

    • Camera.CameraInfo.CAMERA_FACING_BACK:后置摄像头,手机背后的

    • Camera.CameraInfo.CAMERA_FACING_FRONT:前置摄像头,手机屏幕上的

  4. int orientation:表示摄像头图像的自然方向(逆时针),通常会根据它在显示图像时对其进行适当的旋转

  5. boolean canDisableShutterSound:表示是否可以禁用快门声音


二、使用 Camera.CameraInfo

1、操作步骤
  1. 要使用 Camera.CameraInfo,需要先获取到设备上所有可用的摄像头 ID,通过调用 Camera.getNumberOfCameras 方法

  2. 遍历这些摄像头 ID,对每个 ID 使用 Camera.getCameraInfo 方法来获取每个摄像头的详细信息

2、具体实现
package com.my.camera;import androidx.appcompat.app.AppCompatActivity;import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;@SuppressWarnings("all")
public class CameraInfoActivity extends AppCompatActivity {public static final String TAG = CameraInfoActivity.class.getSimpleName();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_camera_info);getCameraInfo();}private void getCameraInfo() {int numberOfCameras = Camera.getNumberOfCameras();Log.i(TAG, "------------------------------ 摄像头个数:" + numberOfCameras);for (int cameraId = 0; cameraId < numberOfCameras; cameraId++) {Camera.CameraInfo cameraInfo = new Camera.CameraInfo();Camera.getCameraInfo(cameraId, cameraInfo);if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {Log.i(TAG, "------------------------------ 后置摄像头,cameraId 为:" + cameraId);} else if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {Log.i(TAG, "------------------------------ 前置摄像头,cameraId 为:" + cameraId);} else {Log.i(TAG, "------------------------------ 其他摄像头,cameraId 为:" + cameraId);}Log.i(TAG, "---------- facing 为:" + cameraInfo.facing);Log.i(TAG, "---------- orientation 为:" + cameraInfo.orientation);Log.i(TAG, "---------- canDisableShutterSound 为:" + cameraInfo.canDisableShutterSound);}}
}
  • 输出结果
I/CameraInfoActivity: ------------------------------ 摄像头个数:2
I/CameraInfoActivity: ------------------------------ 后置摄像头,cameraId 为:0
I/CameraInfoActivity: ---------- facing 为:0
I/CameraInfoActivity: ---------- orientation 为:90
I/CameraInfoActivity: ---------- canDisableShutterSound 为:true
I/CameraInfoActivity: ------------------------------ 前置摄像头,cameraId 为:1
I/CameraInfoActivity: ---------- facing 为:1
I/CameraInfoActivity: ---------- orientation 为:270
I/CameraInfoActivity: ---------- canDisableShutterSound 为:true

三、关于摄像头图像的自然方向

1、后置摄像头
  1. 后置摄像头(手机背后的) orientation 为 90

  2. 大多数 Android 设备的后置摄像头是横向安装的,因此相机传感器采集的图像需要旋转才能与屏幕方向一致

  3. 即需要顺时针旋转 90 度才能正确显示(调用 Camera 对象的 setDisplayOrientation 方法)

  • 如下图示,这里我们定义箭头指向为摄像头的上方
2、前置摄像头
  1. 前置摄像头(手机屏幕上的) orientation 为 270

  2. 前置摄像头也是横向安装的,前置摄像头与后置摄像头的一个关键区别在于它在预览时会对图像进行镜像处理,即左右镜像处理把 orientation 为 270 处理成 orientation 为 90

  3. 这样也需要顺时针旋转 90 度才能正确显示(调用 Camera 对象的 setDisplayOrientation 方法)

  • 如下图示,这里我们定义箭头指向为摄像头的上方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

malloc中的mmap是如何分配内存的

mmap 的内存分配过程 虚拟内存的分配&#xff1a;当调用 mmap 分配匿名内存时&#xff0c;系统在进程的虚拟地址空间中为请求的内存区域创建一块地址空间。此时并不会立即为该区域分配物理内存&#xff0c;而是仅仅在虚拟地址空间中预留了空间。 页面分配&#xff1a;当进程第…

云计算之数据库

目录 一、RDS产品介绍及排障思路 1.1 云RDS数据库及其特点 1.2 云RDS数据库-规格 1.3 云RDS数据库-存储 ​1.4 云RDS数据库-安全 ​1.5 云RDS数据库-整体架构 1.6 RDS常见问题排查 ​1.6.1 如何解决无法链接RDS实例的问题 1.6.2 RDS实例存储空间使用率高&#xff0c;怎…

机器学习引领未来:赋能精准高效的图像识别技术革新

图像识别技术近年来取得了显著进展,深刻地改变了各行各业。机器学习,特别是深度学习的突破,推动了这一领域的技术革新。本文将深入探讨机器学习如何赋能图像识别技术,从基础理论到前沿进展,再到实际应用与挑战展望,为您全面呈现这一领域的最新动态和未来趋势。 1. 引言 …

计算机网络与Internet应用

一、计算机网络 1.计算机网络的定义 网络定义&#xff1a;计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享…

chrome 插件开发入门

1. 介绍 Chrome 插件可用于在谷歌浏览器上控制当前页面的一些操作&#xff0c;可自主控制网页&#xff0c;提升效率。 平常我们可在谷歌应用商店中下载谷歌插件来增强浏览器功能&#xff0c;作为开发者&#xff0c;我们也可以自己开发一个浏览器插件来配合我们的日常学习工作…

【leetcode详解】爬楼梯:DP入门典例(附DP通用思路 同类进阶练习)

实战总结&#xff1a; vector常用方法&#xff1a; 创建一个长为n的vector&#xff0c;并将所有元素初始化为某一定值x vector<int> vec(len, x) 代码执行过程中将所有元素更新为某一值x fill(vec.begin(), vec.end(), x) // 更多实战方法欢迎参考文章&#xff1a;…

HumanNeRF:Free-viewpoint Rendering of Moving People from Monocular Video 翻译

HumanNeRF&#xff1a;单目视频中运动人物的自由视点绘制 引言。我们介绍了一种自由视点渲染方法- HumanNeRF -它适用于一个给定的单眼视频ofa人类执行复杂的身体运动&#xff0c;例如&#xff0c;从YouTube的视频。我们的方法可以在任何帧暂停视频&#xff0c;并从任意新的摄…

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战&#xff1a;技术创新引领未来 近年来&#xff0c;国产游戏行业蓬勃发展&#xff0c;技术水平不断提升&#xff0c;许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎&#xff0c;从AI技术到服务器架构&#xff0c;国产游戏已实现质的飞跃。然…

mybatis-plus 雪花算法id冲突问题解决、雪花算法id冲突、雪花算法、id冲突解决、id、id冲突、主键冲突

mybatis-plus 雪花算法id冲突问题解决、雪花算法id冲突、雪花算法、id冲突解决、id、id冲突、主键冲突 问题&#xff1a; k8s里起了多个pod&#xff0c;发现mybatis-plus的雪花算法不同pod之前生成了相同的id 问题原因&#xff1a; mybatis-plus默认id生成器生成datacenterId…

堆排序Java

思路 这个代码还不错 https://blog.csdn.net/weixin_51609435/article/details/122982075 就是从下往上进行调整 1. 如何将数组映射成树 对于下面这颗树&#xff0c;原来的数组是&#xff1a; 好&#xff0c;如果调整的话&#xff0c;我们第一个应该调整的是最下边&#x…

html记账本改写:数据重新布局,更好用了,没有localStorage保存版本

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>htm记账本</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid …

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join(., data), exist_okTrue) data_file os.path.join(., data, house_tiny.csv) with open(data_file, w) as f:f.write(NumRooms,Alley,Price\n) # 列名f.write(NA,Pave,127500\n) # 每行表示一个数据样本f.write(2,NA,106000\n)f.write(4,…

CSS学习11--版心和布局流程以及几种分布的例子

版心和布局流程 一、版心二、布局流程三、一列固定宽度且居中四、两列左窄右宽五、通栏平均分布型 一、版心 版心&#xff1a;是指网页主题内容所在的区域。一般在浏览器窗口水平居中位置&#xff0c;常见的宽度值为960px、980px、1000px、1200px等。 二、布局流程 为了提高…

探索EasyCVR与AI技术深度融合:视频汇聚平台的新增长点

随着5G、AI、边缘计算、物联网&#xff08;IoT&#xff09;、云计算等技术的快速发展&#xff0c;万物互联已经从概念逐渐转变为现实&#xff0c;AIoT&#xff08;物联网人工智能&#xff09;的新时代正在加速到来。在这一背景下&#xff0c;视频技术作为信息传输和交互的重要手…

SpringMVC使用:类型转换数据格式化数据验证

01-类型转换器 先在pom.xml里面导入依赖&#xff0c;一个是mvc框架的依赖&#xff0c;一个是junit依赖 然后在web.xml里面导入以下配置&#xff08;配置的详细说明和用法我在前面文章中有写到&#xff09; 创建此测试类的方法用于测试springmvc是具备自动类型转换功能的 user属…

Linux驱动.之字符设备驱动框架,新内核框架,设备树(二)

第一篇比较长&#xff0c;第二篇&#xff0c;继续写&#xff0c;内容有重复 一、字符设备驱动框架 在用户空间中调用open&#xff0c;打开一个字符设备&#xff0c;执行流程如下&#xff1a;最终会执行chrdev中的ops对应的open函数。

Kafka3.6.0 linux 安装,非zk模式

1.下载 到kafka官网下载 2.上传到服务器指定位置 3.解压到指定目录&#xff0c;这里我放到/opt下 tar -xzvf kafka_2.13-3.6.0.tgz -C /opt/ 4.修改配置 因为我们不使用zookeeper&#xff0c;所以来到kafka装根目录的下的/config/kraft/ cd /opt/kafka_2.13-3.6.0/config…

C++复习day05

类和对象 1. 面向对象和面向过程的区别是什么&#xff1f;&#xff08;开放性问题&#xff09; 1. **抽象级别**&#xff1a;- **面向对象**&#xff1a;以对象&#xff08;数据和方法的集合&#xff09;为中心&#xff0c;强调的是数据和行为的封装。- **面向过程**&#xf…

爆改YOLOv8|利用图像分割网络UNetV2改进yolov8主干-即插即用

1&#xff0c;本文介绍 U-Net v2 通过引入创新的跳跃连接设计来提升医学图像分割的精度。这一版本专注于更有效地融合不同层级的特征&#xff0c;包括高级特征中的语义信息和低级特征中的细节信息。通过这种优化&#xff0c;U-Net v2 能够在低级特征中注入丰富的语义&#xff…

AI 与大模型:物流行业的变革力量

一、物流行业的现状与挑战 物流行业在现代经济中扮演着至关重要的角色&#xff0c;但目前也面临着诸多挑战。 在效率方面&#xff0c;交通拥堵是一个突出问题。许多城市道路容量不足&#xff0c;无法满足日益增长的货物运输需求&#xff0c;导致运输时间延长。例如&#xff0…