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

news2024/12/25 12:43:31

一、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();

    @Override
    protected 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.coloradmin.cn/o/2116620.html

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

相关文章

Protobuf库的使用

文章目录 Protobuf是什么Protobuf使⽤流程介绍ProtoBuf的使用创建.proto⽂件指定proto3语法package声明符定义消息&#xff08;message&#xff09;编译contacts.proto⽂件命令如下&#xff1a;序列化与反序列化的使⽤ Protobuf是什么 ProtoBuf&#xff08;全称ProtocolBuffer…

数字 FPV 革命 – DJI、Leadcore 和 Artosyn 的三角关系。

人们对 DJI、Caddx FPV 以及 HDZero 等公司最近推出的数字 FPV 系统的起源进行了大量的猜测和推测。随着 Avatar 系统的发布&#xff0c;也有许多人认为它要么使用与 DJI 相同的芯片组&#xff0c;要么是复制品或克隆品。在本文中&#xff0c;我将尝试揭开这一切的神秘面纱&…

python spider novel

python msedgedriver 获取小说 声明&#xff1a;只为学习/练习技术 from lxml import etree from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Optionsimport time# 初始化EdgeOptions, 以…

【系统规划与管理师】【案例分析】【考点】【答案篇】第4章 IT服务规划设计

【问题篇】☞【系统规划与管理师】【案例分析】【考点】【问题篇】第4章 IT服务规划设计 【移动端浏览】☞【系统规划与管理师】【案例分析】【模拟考题】章节考题汇总&#xff08;第4章&#xff09;&#xff08;答案篇&#xff09;&#xff08;共38个知识点&#xff09; 第4章…

《数字信号处理》学习05-单位冲击响应与系统响应

目录 一&#xff0c;单位冲激响应 二&#xff0c;LTI系统对任意序列的系统响应 三&#xff0c;LTI系统的性质 通过上一篇文章《数字信号处理》学习04-离散时间系统中的线性时不变系统-CSDN博客的学习&#xff0c;我已经知道了离散时间线性时不变系统&#xff08;LTI&#x…

基于 jenkins 的持续测试方案

CI/CD Continuous Integration; Continuous Deployment; 持续集成&#xff0c;将新代码和旧代码一起打包、构建&#xff1b;持续部署&#xff0c;将新构建的包进行部署&#xff1b;持续测试&#xff0c;将新代码、新单元测试一起测试&#xff1b;方案&#xff1a; 公有云DevO…

Python 控制Chrome浏览器使用Selenium4操作点击百度搜索

前面我们讲到如何安装Selenium和ChromeDriver来驱动打开网页,现在我们有一个目的就是使用python来控制chrome浏览器打开百度并搜索 直接先上调试好的代码 from time import sleepfrom selenium import webdriver from selenium.webdriver.common.keys import Keys from selen…

2-88 基于matlab的四叉树加权聚焦多聚焦图像融合

基于matlab的四叉树加权聚焦多聚焦图像融合&#xff0c;的四叉树分解策略将源图像被分解成四叉树结构中具有最佳尺寸的块。在这个树形结构中&#xff0c;使用一种新的加权焦点测量方法&#xff08;名为加权修正拉普拉斯之和&#xff09;来检测焦点区域。可以很好地从源图像中提…

1934. 数字游戏(number)

代码 #include<bits/stdc.h> using namespace std; int main() {int ans0,i;string s;cin>>s;for(i0;i<7;i)if(s[i]1)ans;cout<<ans;return 0; } 记得点赞关注收藏&#xff01;&#xff01;&#xff01;谢谢&#xff01;&#xff01;&#xff01;

基于huffman树的文件压缩项目以及相关测试

前言 项目采用Huffman编码的方式进行文件压缩与解压缩。主要原理是通过Huffman编码来表示字符&#xff0c;出现次数多的编码短&#xff0c;出现次数少的编码长&#xff0c;这样整体而言&#xff0c;所需要的bit位是减少的&#xff0c;就实现了文件压缩功能。读取文件中的字符出…

基于大语言模型智能体的自主机器学习

文章介绍了MLR-Copilot框架&#xff0c;这是一种利用大型语言模型&#xff08;LLMs&#xff09;来自动化机器学习研究中创意生成、实验设计和实施过程的方法。该框架分为三个阶段&#xff1a; 首先通过阅读现有研究文献&#xff0c;使用LLM驱动的IdeaAgent来生成研究假设和实验…

PADS Router 入门基础教程(一)

有将近三周没有更新过博客了&#xff0c;最近在整理PADS Router 入门基础教程&#xff0c;希望喜欢本系列教程的小伙伴可以点点关注和订阅&#xff01;下面我们开始进入PADS Router课程的介绍。 一、PADS Router 快捷键 ​ 二、课程介绍 本教程主要介绍&#xff1a;PADS Rou…

电脑安装Winserver2016无法安装网卡驱动(解决办法)

因为工作原因&#xff0c;需要找一台PC机作为服务器去测试软件性能问题&#xff0c;故需要在PC机上安装网卡驱动。 电脑品牌&#xff1a;联想 型号&#xff1a;天逸510Pro-18ICB 操作系统&#xff1a;WindowsServer2016&#xff08;桌面版&#xff09; 问题&#xff1a;系统…

连接池-druid

原因&#xff1a;通过jdbc 创建Connection时比较耗费资源和时间&#xff0c;如果程序每次执行数据库操作都自己创建连接&#xff0c;项目不好控制连接数量&#xff0c;另外程序执行相对耗时。 市面上有很多厂商有连接池组件&#xff0c;目前比较出名的是alibaba druid 以及 Hi…

828华为云征文|华为Flexus云服务器快速上手实例安装“运维搭子”

⭐ 引言 华为云Flexus X实例简介 在现代云计算的世界里&#xff0c;资源的灵活性和性能至关重要。华为云Flexus X实例正是为满足这一需求而诞生的&#xff0c;它代表了云服务器技术的新高度 &#x1f310;&#x1f680;。 华为云Flexus X实例采用了领先的擎天QingTian架构&a…

计算机毕业设计 沉浸式戏曲文化体验系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

深入探索嵌入式 Linux

摘要&#xff1a;本文深入探究嵌入式 Linux。首先回顾其发展历程&#xff0c;从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构&#xff0c;涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域&#xff0c;广泛应用…

uniapp设置微信小程序的交互反馈

链接&#xff1a;uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗&#xff1a; title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon&#xff1a;error是设置我们失败的logo 设置的文字上…

探探我对加密算法的认识

密码学基本认知 为什么需要加密算法&#xff0c;如果不加密可能导致哪些问题&#xff1f; 如果对传输的数据不使用加密算法&#xff0c;所有的数据在传输过程中都是明文传输的&#xff0c;那么会出现以下三种问题&#xff1a; 1&#xff09;泄露问题&#xff1a;如果在网络中…

大美祖国之地名篇-探寻全国同名地名

目录 前言 一、地名数据库 1、数据库模型 2、数据表结构 二、实践之旅&#xff0c;发现同名地名 1、省、市同名 2、市、县同名 3、 区县、乡镇同名 4、乡镇和村委会同名 三、总结 前言 我们祖国地大物博&#xff0c;从北到南&#xff0c;从东到西。祖国位于亚洲东部&…