使用zoom预览出图和系统相机预览出图,画质不一样的问题分析

news2024/11/24 22:33:03

1、问题背景

最近在基于 Android 的平台调试一款摄像头,客户有反馈一个问题,系统自带的 Camera2 app 预览出图是正常的,但用 Zoom app 打开摄像头,出图画面存在畸变、锯齿、过曝的问题,现象如下图所示。

2、问题分析

这里是存在3个问题,畸变、锯齿、过曝,我们依次来做分析。

a、关于畸变

首先我们是针对不同分辨率下做过畸变校正的,预览、录像、拍照分别对应的是三路流,出不同的分辨率。预览是1080P、录像是4K、拍照是全尺寸,所以查看一下用 Zoom 出图时此时走的是哪路流,出的分辨率是多少就可以了(我是通过dump 实时的yuv,可以看到输出的yuv的尺寸来确定的)。

有确认到用 Zoom 出图时,出的是 640x480 的分辨率,他是从全尺寸直接 resize 成 640x480 的 ,我们未做过这个分辨率下的畸变校正,所以增加一组 640x480 下的畸变校正参数即可解决。

这里要提一下,关于畸变校正为什么不可以直接在 sensor 出来的原始尺寸上去做,而是要分别基于从原始数据源分出的预览、录像、拍照三路上单独去做呢?如果是基于原始尺寸去校正,那之后的 crop、downscale 就不会存在畸变,也不用单独基于每个分辨率去增加畸变参数那么麻烦了(这里的前提是 sensor 只有一组setting,只有一个数据源输出)。 

1>. 一般关于畸变校正是有单独的一个硬件模块去做处理的,目前我们这个平台 ISP 是直接出三路,没办法在中间先过畸变校正的模块。

2>. 另外一点就是 crop /dowscale 之前做,只适合 1080P 这样的尺寸,尺寸太大了,硬件性能会不够(而对于全尺寸的拍照可以做,是因为拍照只是取视频流中的一帧,录像和预览则是实时的数据流都要处理 )。

b、关于锯齿

锯齿的成因有很多,ISP中调试参数的问题、全尺寸到小尺寸resize的处理、camera apk 的处理等等,可以依次一步一步的 dump 数据进行比较,确认是哪个模块的问题,再去做相应的处理,但首先得了解这个视频出流的 pipeline, 都经过了哪些模块,才好去做排查。

但我这里的问题是 Zoom 预览出图是 640x480, 而系统相机 Camera2 预览出图是 1920x1080,这就没啥可比性了, 要用更少的像素来显示同样数据的场景,小分辨率下肯定是会锯齿比较明显,所以这里是正常现象,如果是同分辨率下,存在锯齿的差异,那就要去按出流的 pipeline 去排查原因了。

c、关于过曝

同样的我们要判断 Zoom 出图时走的是哪路流,然后是哪个模块导致的,是 Zoom app 类似自带的美颜效果处理导致的、还是 ISP 当中哪个模块调试参数导致的、还是从全尺寸 resize 到 640x480 的处理导致的。

1>. 首先通过指令确认 Zoom 和系统相机预览时,走的是否是同一路,确认结果是走的同一路。

2>. 场景亮度不变,在固定AE下,分别 dump camera2 预览的截屏和 yuv,及 zoom 预览的截屏和 yuv 来对比亮度结果。

camera2 预览的截屏和 yuv 亮度是一致的。

zoom 的预览截屏和 yuv 亮度是一致的。

camera2 预览的截屏和 zoom 预览的截屏亮度不一致,zoom 预览画面亮度高。

camera2 预览的 yuv 和 zoom 预览的 yuv 亮度不一致,zoom 预览的 yuv 亮度高。

从上面比较结果可知,app 的表现和 yuv 的一致,那就不是 app 的处理导致。但两个尺寸的 yuv 亮度结果不一致那就需要继续往上排查。

3>. 将 camera2 的预览和拍照,都设置成 640x480 输出,分别 dump 640x480 预览和拍照的 yuv,确认下效果。

结果是拍照的 yuv 亮度正常,预览 yuv 亮度过曝,所以问题就是,在分辨率为640x480下,预览这路有问题。

预览和拍照都用的同一套效果参数,且AE固定,场景不变,且1080P 下的预览效果是正常的,那就不大可能是 ISP 调试参数的问题。

只有可能是预览这路从全尺寸 resize 成 640x480 的处理导致的,最后确认结果确时是 resize 处理相关,调整寄存器参数,更新驱动后解决。

3、问题总结

对于基于Android 平台调试 Camera 来说,客户通常会使用到很多第三方的Camera app, 对于不同app 出图效果不一致的问题,可以参考上述过程来做相应排查。

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

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

相关文章

前端基础(Web API)

目录 前言 Web API DOM 基本概念 查找元素 document.getElementById document.getElementsByClassName document.evaluate() 修改元素 添加元素 修改元素 复制元素 删除元素 Event事件 事件创建 常用的事件 监听事件 click事件 mouseover事件 事件绑定…

LTPP在线开发平台【使用教程】

LTPP在线开发平台 点击访问 LTPP在线开发平台 LTPP(Learning teaching practice platform)在线开发平台是一个编程学习网站,该网站集文章学习、短视频、在线直播、代码训练、在线问答、在线聊天和在线商店于一体,专注于提升用户编…

使用SpringBoot+SpringMVC+Mybatis+WebSocket实现云聊天项目

云聊天 1. 项目介绍 本项目是仿照微信实现网页版聊天程序,用户注册登录后可与在线好友实时聊天,下线好友上线后可以查看到好友发送的消息;用户可以在搜索框搜索用户添加好友;用户还可以查看好友申请列表,选择是否同意…

Golang使用消息队列(RabbitMQ)

最近在使用Golang做了一个网盘项目(类似百度网盘),这个网盘项目有一个功能描述如下:用户会删除一个文件到垃圾回收站,回收站的文件有一个时间期限,比如24h,24h后数据库中记录和oss中文件会被删除…

使用Vscode 编辑器 导出、导入和运行Excel中的VBA代码

使用Vscode 编辑器 导出、导入和运行Excel中的VBA代码 前言 Excel自带的 Microsoft Visual Basic for Applications 编辑器常被人称为上古编辑器,的确不适合代码编辑,这是其一,其二是当系统语言与Excel的安装语言不一致时,往往出现…

QChart类用来 管理 图表的:数据序列(series)、图例(legend)和坐标轴(axis)

QChart类用来 管理 图表的:数据序列(series)、图例(legend)和坐标轴(axis) 1、数据序列类 继承关系 2、坐标轴类 的继承关系 3、图例类 什么是图例? 图例:是集中于地图…

Docker搭建LNMP运行Wordpress平台

一、项目1.1 项目环境1.2 服务器环境1.3 任务需求 二、Linux 系统基础镜像三、Nginx1、建立工作目录2、编写 Dockerfile 脚本3、准备 nginx.conf 配置文件4、生成镜像5、创建自定义网络6、启动镜像容器7、验证 nginx 四、Mysql1、建立工作目录2、编写 Dockerfile3、准备 my.cnf…

如何做H5性能测试?

提起H5性能测试,可能许多同学有所耳闻,但是不知道该如何对H5做性能测试,或者不知道H5应该关注哪些性能指标。今天我们就来看下,希望阅读本文后,能够有所了解。 常用指标 1、H5性能相关参数介绍 白屏时间:…

FRP内网穿透,配置本地电脑作为服务器

FRP内网穿透,配置本地电脑作为服务器 下载FRP服务端客户端 参考链接: https://www.it235.com/实用工具/内网穿透/pierce.html https://www.cnblogs.com/007sx/p/17469301.html 由于没有公网ip,所以尝试内网穿透将本地电脑作为服务器&#xff…

第 6 章 递归(1)(应用场景,概念,调用机制,解决问题类型,重要规则)

6.1递归应用场景 看个实际应用场景,迷宫问题(回溯), 递归(Recursion) 6.2递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 6.3递归调用机制 我列举两个小案例,…

代码随想录算法训练营之JAVA|第三十四天|509. 斐波那契数

今天是第 天刷leetcode,立个flag,打卡60天,如果做不到,完成一件评论区点赞最高的挑战。 算法挑战链接 509. 斐波那契数https://leetcode.cn/problems/fibonacci-number/ 第一想法 这个就是求斐波那契数,感觉应该不用…

Error creating bean with name ‘esUtils‘ defined in file

报错异常: 背景: esUtils在common服务中、启动media服务时候、报这个异常、后排查esUtils在启动时候发生异常引起的、在相关bean中加入try{}catch{}即可解决问题 String[] split url.split(","); HttpHost[] httpHosts new HttpHost[split.…

卷积网络手动实现和nn实现

代码中涉及的图片实验数据下载地址:https://download.csdn.net/download/m0_37567738/88235543?spm1001.2014.3001.5501 (一)手动实现卷积算法 代码: import os import torch.nn.functional as F from PIL import Image import…

装饰器读取不到被装饰函数的参数-已解决

def write_case_log(func):def wrapper(*args, **kwargs):logger.info("{}开始执行".format(func.__name__))func(*args,**kwargs)logger.info("{}执行中".format(args))logger.info("{}执行结束",format(func.__name__))return wrapper被装饰函…

卡方分箱(chi-square)

统计学,风控建模经常遇到卡方分箱算法ChiMerge。卡方分箱在金融信贷风控领域是逻辑回归评分卡的核心,让分箱具有统计学意义(单调性)。卡方分箱在生物医药领域可以比较两种药物或两组病人是否具有显著区别。但很多建模人员搞不清楚…

基于SSM的校园旧书交易交换网站

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

CVE-2023-21292 AMS框架层高危漏洞分析

文章目录 前言漏洞细节故事起源漏洞利用漏洞修复 总结 前言 本周在分析 Google 官方发布的 Android 2023 年8 月安全公告 涉及的漏洞补丁的时候,遇到一个有意思的漏洞:CVE-2023-21292。 之所以说它有意思是因为这个漏洞早在去年年底就在某平台上被国外…

shell脚本语句

一、语句 一、条件语句 一、以用户为例演示 一、显示当前登录系统的用户信息 w命令 二、显示有多少个用户 w | wc -l 显示有7个用户 前两个是固定标题,从第三个开始才是登录用户,所以要统计数量需要 命令:echo $[$(w | wc -l) -2] 显示…

知识储备--基础算法篇-Hash table

1.哈希表的基础概念 哈希表是一种数据结构,它使用哈希函数将键映射到存储桶或槽位中。它通过将键转换为索引来实现快速的插入、查找和删除操作。哈希表通常用于需要高效查找的场景,如字典、缓存和数据库中。 常见哈希结构 数组set(集合&am…

系统架构设计专业技能 · 数据库设计

系列文章目录 系统架构设计专业技能 软件工程(一)【系统架构设计师】 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(…