第46讲 Android Camera2 API AWB自动白平衡

2023-10-27

本讲是Android Camera专题系列的第46讲,我们介绍Android Camera2 API专题的AWB自动白平衡,包括如下内容:

  1. 为什么要做白平衡
  2. 什么是自动白平衡
  3. Android Camera颜色处理流程
  4. AWB模式
  5. AWB Lock
  6. AWB Region
  7. AWB State
  8. Manual AWB

视频在线观看:

加入知识星球与更多Camera同学交流
– 星球名称:深入浅出Android Camera
– 星球ID: 17296815

– 微信公众号:

 

为什么要做白平衡

人眼:在不同的光源下,人眼看到的白色物体总是白色的
图像传感器:在不同光源下,白色物体成像在Sensor上是不一样的
因此需要把Sensor的RGB相应各乘以一个系数来使得RGB相等

R’ = R x R_Gain
G’ = G x G_Gain
B’ = B x B_Gain

使得 R’=G’=B’

什么是自动白平衡

自动白平衡 (Auto White Balance): 通过算法根据统计数据自动计算出R/G/B的Gain值

Android Camera颜色处理流程

AWB模式

CaptureRequest#CONTROL_AWB_MODE,通过CameraCharacteristics#CONTROL_AWB_LOCK_AVAILABLE判断支持哪些Mode

CONTROL_AWB_MODE取值 描述
CONTROL_AWB_MODE_OFF AWB算法Disabled,App通过修改CCM和AWB Gain来手动控制白平衡
CONTROL_AWB_MODE_AUTO AWB算法Enabled,白平衡由算法控制,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_FLUORESCENT AWB算法Disabled,使用荧光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源F2
CONTROL_AWB_MODE_WARM_FLUORESCENT AWB算法Disabled,使用暖荧光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源F4
CONTROL_AWB_MODE_DAYLIGHT AWB算法Disabled,使用日光灯作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略,匹配CIE标准光源D65
CONTROL_AWB_MODE_CLOUDY_DAYLIGHT AWB算法Disabled,使用多云白天作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_TWILIGHT AWB算法Disabled,使用黄昏作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略
CONTROL_AWB_MODE_SHADE AWB算法Disabled,使用阴影光作为假定的场景照明来调节白平衡,App设置的CCM和AWB Gain会被忽略

AWB Lock

判断是否支持

  • 读取CameraCharacteristics#CONTROL_AWB_LOCK_AVAILABLE
    Capability为MANUAL_POST_PROCESSING 或 BURST_CAPTURE 的设备必须支持

控制AWB Lock

  • 通过控制CaptureRequest#CONTROL_AWB_LOCK完成AWB Lock,设置为TRUE后意味着AWB算法的输出会固定在最新结果
  • 只有当AWB Mode为AUTO时才能Lock,其他模式不存在Lock
  • App在Auto AWB和Manual AWB间切换时,如果发现有闪烁现象,可通过如下流程解决
    1. AWB 模式运行
    2. Lock AWB
    3. 从CaptureResult中等待Lock完成
    4. 从CaptureResult中读取WB gain和CCM
    5. 使能Manual WB并将step4读取到的CCM和WB Gain设置下去
    6. 继续调整CCM或WB Gain,进入Manual WB流程

AWB Region

判断是否支持设置AWB Region

  • 读取CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
  • 大于0则表示支持控制AWB Region

设置AWB Region

  • 通过CaptureRequest#CONTROL_AWB_REGIONS来设置,坐标系同AE/AF Region

AWB State

读取CaptureResult#CONTROL_AWB_STATE

android.control.awbMode != AWB_MODE_AUTO

android.control.awbMode == AWB_MODE_AUTO

Manual AWB

手动白平衡 – 设置Gain

  • 需要将android.control.awbMode设置为OFF,android.colorCorrection.mode设置为TRANSFORM_MATRIX
  • 通过设置 android.colorCorrection.gains 来控制WB Gain: [R_gain, G_even_gain, G_odd_gain, B_gain], gain的取值范围[1.0, 3.0]

手动白平衡 – 设置CCM

  • 需要将android.control.awbMode设置为OFF,android.colorCorrection.mode设置为TRANSFORM_MATRIX
  • 通过设置android.colorCorrection.transform来控制CCM,3×3有理数矩阵,按行主顺序排列[ I0 I1 I2 I3 I4 I5 I6 I7 I8 ],每个元素的有效范围因不同的设备有差异,但[-1.5,3.0]范围内的值保证不会被裁剪。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第46讲 Android Camera2 API AWB自动白平衡 的相关文章

  • 在S3客户端android中制作私有图像的ImageGallery

    我正在尝试在 Android 应用程序中创建 S3 Bucket 的 imageGallery 我的图像是私人的 所以我不会为每个图像提供任何特定的链接 对于此类私人图像 亚马逊有一个链接生成器 s3Client generatePresi
  • 使用kivy/python访问android手电筒(相机LED闪光灯)

    我不知道如何使用 python 或 kivy 访问 android 上的 led 灯 我尝试安装 python for android 以便能够将 android 模块导入到我的代码中 但不是找不到模块 我按照此处的说明克隆了 python
  • 如何在不清除和闪烁地图的情况下刷新谷歌地图上的标记位置?

    是否可以创建无需闪烁 清除整个地图即可更新的 Google 地图 V2 标记 目前我必须清除地图然后添加标记 googleMap clear googleMap addMarker new MarkerOptions position en
  • 以编程方式更改 android 按钮可绘制图标颜色

    我想以编程方式更改按钮的图标颜色 在我的 xml 上 我有 android drawableTint color colorPrimary android drawableTop drawable ic car black 24dp 要设置
  • Android 当应用程序启动时显示白屏几秒钟?

    我没有调用任何 URL 请求 该应用程序显示了一个简单的启动屏幕 我也禁用了即时运行 但该警告仍然出现 06 26 09 26 05 022 8709 8709 saurav com navigation drawer I art 后期启用
  • Unity 2018.3 android dex合并问题

    在您决定将这篇文章视为 重复 而不阅读它之前 请了解我已经查看了大量与此主题相关的帖子 但我找不到适合我的实例的解决方案 包括 StackOverflow 建议的所有解决方案 大多数帖子都是针对 Android Studio 而不是 Uni
  • 呼叫转移

    我想将所有拨打我号码的呼叫转接至新的预定义号码 自动地 可以转接来电吗 也许至少对于 Froyo 来说是可能的 我找到了名为 Easy Call Forwarding 的应用程序 http www appstorehq com easyca
  • Firebase 实时数据库 .info/connected 本应为 True 时为 False

    我有一个 Android 服务 它的调用地址为onCreate FirebaseDatabase database FirebaseDatabase getInstance database getReference info connec
  • Android中如何检测程序的终止?

    当 Windows 程序终止时 它会调用事件处理程序 例如 OnClose OnDestroy 和析构函数 Destroy 当我想保存一些 INI 设置时 这些地方就是我要保存的地方 我为所有这些事件编写了事件处理程序 但当我终止程序时它们
  • Android接收短信Intent:获取消息Id或线程Id

    我已经注册了一个广播监听器来接收android provider Telephony SMS DELIVER意向行动 我似乎能够获取这条新消息的正文和发件人电话号码 但是我无法获取此新消息的消息 ID 或线程 ID 我发现的唯一方法是搜索消
  • Android WebView setCertificate 问题 SSL 问题

    我看过很多关于 SSL 错误的帖子和信息 并且我自己也偶然发现了一个 我尝试使用 GlobalSign CA BE 证书通过 Android WebView 访问网页 但收到不受信任的错误 对于大多数手机来说 处理这个问题效果很好 只需告诉
  • 如何将两个 APK 合并为一个,以便两个应用程序可以同时安装

    如何将 2 个 Android 应用程序合并到捆绑包中 以便在安装捆绑包时同时安装两个应用程序 我想将 2 个 APK 合并到一个捆绑包中 以便我可以将其上传到 Android Market 当有人将其安装到设备上时 这两个应用程序都应该安
  • 在包“android”中找不到属性“roundIcon”的资源标识符

    我正在尝试编译我的项目 但出现一些错误 Android 清单 xml
  • 返回 RxJava 的 Completable 的方法的命名约定

    我有一个带有视图类的 Android 应用程序 Fragment Activity 观察其ViewModel The ViewModel公开方法 例如getUserName返回Observable
  • 未找到 ID 为“com.android.feature”的插件

    在将我现有的应用程序转换为即时应用程序时 使用这个 Codelab 教程 https codelabs developers google com codelabs android instant apps 遇到这个错误 Plugin wi
  • 回购:找不到命令?

    我是 git 和 repo 的新手 我使用的是window 7 所以我使用cygwin 我已经从 cygwin 安装程序安装了 git 之后我尝试在 cygwin 中使用以下命令进行存储 repo init u git android gi
  • 启动 Activity 时自动弹出键盘

    我有一个相对简单的问题 我有一个包含很多 EditText 的活动 当我打开活动时 它会自动聚焦到第一个 EditText 并显示虚拟键盘 我怎样才能防止这种情况发生 在 XML 文件的布局标签中使用此属性 android focusabl
  • 在大画布上滚动

    我需要一些帮助来了解滚动绘制到 Android 画布上的项目的基础知识 假设我想创建一个时间线 其中 0 处的时间是可视化的顶部 并且随着时间的增加 时间线继续呈现在上一个点下方 如果我想在 Android 上渲染它 我知道我可以通过重写
  • 无法放置双重 SharedPreferences

    出现错误 这种类型的共享首选项编辑器的 put double 方法未定义 Eclipse 提供了一种快速修复方法 将强制类型转换添加到编辑器 但是当我这样做时 它仍然给出错误 为什么我不能 put double 代码 Override pr
  • Android Studio 3.0 中的 Gradle 构建错误

    您能帮我解决 Android 3 0 中的 Gradle 构建问题吗 我是 Android Studio 的新手 以下是我在 AS 3 0 中的配置 gradle gt wrapper gt gradle wrapper propertie

随机推荐

  • matlab 多输入多输出神经网络

    构建训练样本集 inputn input train outputn output train 构建BP神经网络 net newff inputn outputn 21 21 tansig tansig trainbr 网络参数 net t
  • STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压,内部参照电压的具体方法,只有在STM32F0x芯片的参考手册中才能找到,其他MCU的参考手册都是很简单的说明

    STM32 之十 供电系统及内部参照电压 VREFINT 使用及改善ADC参考电压 ZCShouEXP 2018 12 21 10 50 33 16404 收藏 32 展开 问题 今天在使用 STM32F407 的 ADC 时遇到一个问题
  • char *,char **,char a[ ],char *a[]

    1 字符数组 C语言中规定数组代表数组所在内存位置的首地址 也是 str 0 的地址 即str str 0 而printf s str 为什么用首地址就可以输出字符串 因为还有一个关键 在C语言中字符串常量的本质表示其实是一个地址 这是许多
  • 2022年年终总结,不忘初心,砥砺前行

    从2019年开始第一次在csdn写个人年终总结 不知不觉已经坚持了三年 今年是第四次写年终总结 其实在前几个周自己写过一个年终总结 不过那是每年公司年要求每个人都要写的一个工作述职 来总结过去一年自己给公司所做的贡献 以及存在的问题 还有未
  • MySQL优化篇:执行计划explain中key_len计算方式

    概述 key len表示索引使用的字节数 根据这个值可以判断索引的使用情况 特别是在使用联合索引的时候 判断该索引有多少部分被使用到非常重要 key len的长度计算公式很重要 key len越小 说明索引效果越好 准备结构和数据 在MyS
  • IDEA 2016免费下载(附安装教程)

    下载地址 软件名称 IntelliJ IDEA 2016 软件大小 790MB 安装环境 Windows 下载链接 https pan baidu com s 1Hy0bVzh9uemWMnhRgx8HkA 提 取 码 geek 建议复制粘
  • QT之Layout类

    这个类是用来布局的 它有各种各样既定风格的盒子 往这个盒子里添加控件 这些控件就会按照这个盒子的风格来找到自己的位置 举个例子 一个水平盒子往里面添加控件 是按照从左往右的顺序依次添加 QHBoxLayout layout 首先创建一个水平
  • IDEA中编译及运行ssm(非maven)项目

    一直用springboot框架 所有回顾下ssm项目环境配置及启动 1 导入项目 2 配置项目环境 2 1然后添加项目自带的jar包 2 2添加 tomcat server服务器 要不运行时代码会报错 缺少依赖 选择自己电脑上的tomcat
  • 写一篇关于chatGPT的心得体会

    这次使用ChatGPT训练的大型语言模型 让我真正感受到了自然语言处理的强大能力 ChatGPT可以根据用户输入的文本 快速生成准确 流畅的回复 拥有丰富的语义表达能力 可以识别各种语句的结构和意义 快速建立起人机之间的交互 它不仅可以帮助
  • MobaXterm插件连接Linux虚拟机

    一 前言 在VirtualBox里面打开的虚拟机系统界面是非常小的 而且看不到鼠标的光标显示 无法去随意点击和进行文件的手动操作 所以老师这里有一个可以连接虚拟机的插件 MobaXterm插件 这个就相当于是手机的投屏器 可以放大系统界面
  • 微信小程序开发架构——JavaScript的基本概述 和 JavaScript在 Nodejs、小程序中、浏览器中的使用方法

    轻量 是指在入门JavaScript语言时候觉得JavaScript 没有其它语言学习起来那么重 解释性 是指所编写的JavaScript语言它在运行时 机器会把JavaScript语言翻译成机器语言 JavaScript语法接近于Java
  • 数字图像字符识别——数字识别

    本文简单介绍图片字符识别的原理 主要识别图片中的数字 其他字符识别原理类似 大家应该知道 对于人类来说 可以很容易理解一张图片所表达的信息 这是人类视觉系统数万年演变进化的结果 但对于计算机这个诞生进化不到百年的 新星 要让它理解一张图像上
  • 如何从头手写一个富文本编辑器(解析slate源码,连载)

    背景 最近文档很火 老板也要 我也很感兴趣 于是入坑学习实践了一番 一眨眼就是一年过去了 项目初见成效 但是发现困难和挑战也越来越棘手 于是深入研究改编了一下源码 为后面重写源码做准备 我们的项目的成果截图 镇宅一下 文章末尾有demo源码
  • 聊聊2017 OWASP Top 10

    关于OWASP Top10 OWASP项目最具权威的就是其 十大安全漏洞列表 OWASPTop 10 OWASP Top 10不是官方文档或标准 而只是一个被广泛采用的意识文档 被用来分类网络安全漏洞的严重程度 目前被许多漏洞奖励平台和企业
  • moduleName is declared but its value is never read.ts(6133)报错解析

    问题重现 当使用ts语法导入第三方库时 比如koa模块 这时会发现出现这个错误 这个错误因为没有默认导出 问题原因 一般我们使用ts导入其他模块时都会有一个声明文件 不明白可以看我另外一篇 博客 我们进入声明文件中可以发现模块是通过expo
  • 使用Easyexcel对Excel进行读写操作

    1 概述 EasyExcel是一个基于Java的简单 省内存的读写Excel的开源项目 在尽可能节约内存的情况下支持读写百M的Excel github地址 GitHub alibaba easyexcel 快速 简洁 解决大文件内存溢出的j
  • ES6模块

    项目目录 node modules package json server js public index html index js math js babelrc dist 搭建验证环境 npm init y npm install s
  • 小程序中使用for循环,并动态添加class

    前言 小程序中使用for循环 并动态添加class 实现效果 实现代码 index wxml中
  • 考研高数数二 一元函数积分学内容框架

    完整的思维导图链接 https zhimap com m NojzfjkC
  • 第46讲 Android Camera2 API AWB自动白平衡

    本讲是Android Camera专题系列的第46讲 我们介绍Android Camera2 API专题的AWB自动白平衡 包括如下内容 为什么要做白平衡 什么是自动白平衡 Android Camera颜色处理流程 AWB模式 AWB Lo