第38讲 通过cropregion控制zoom缩放 -凯发k8旗舰厅

本讲是android camera专题系列的第38讲,我们介绍android camera2 api专题的通过cropregion控制zoom缩放。

更多资源:

资源 描述
在线课程
知识星球 星球名称:深入浅出android camera
星球id: 17296815
wechat 极客笔记圈

android zoom简介

zoom就是对画面进行放大或缩小功能,分为光学变焦(optical zoom)和数字变焦(digital zoom)两种

光学变焦 数字变焦
光学变焦是通过物理光学手段来变焦的,也就是调整硬件的镜片间的距离实现的 数字变焦是软件手段,在计算机上放大图片
光学变焦是真实的像素,它可以原汁原味地还原远处的景物,而不会有什么质量损失 数字变焦是利用软件对已有像素周边的色彩进行判断,并根据周边的色彩情况插入经特殊算法加入的像素,所产生的照片是通过软件运算方式得到的
光学变焦的原理就是通过改变焦距的大小来改变图像的大小,而且光学变焦只是改变了光线传输的距离,光线本身没有变化,所以照片质量不会发生变化 数字变焦最基本的原理就是将一张已经固定的照片在进行放大,因为数码照片是使用像素组成的,所以进行变焦之后只能看到一个个的小点或者小方块

如何查询当前camera支持的zoom能力

cameracharacteristics description
scaler_available_max_digital_zoom 当前camera支持的最大数字变焦倍数
active area width / crop region width 或 active area height / crop region height能支持的最大值,也就描述了最小的crop region
当crop region小于该区域时,超出的部分会被忽略
control_zoom_ratio_range 当前camera支持的变焦范围,包括数字和光学变焦的能力
maxzoom >= 1.0 >= minzoom, 当minzoom小于1时表示能增加fov(手机上是指切到广角镜头)

通过crop region控制digital zoom

capturerequest#scaler_crop_region用于控制digital zoom的

crop region坐标系

不支持android.distortioncorrection.mode

  • left,top = [0, 0], right,bottom = [android.sensor.info.activearraysize]

支持android.distortioncorrection.mode

  • distortion correction mode 是off
    • left,top=[0,0], right bottom = [android.sensor.info.precorrectionactivearraysize]
  • distortion correction mode 是非off
    • left,top=[0,0], right bottom = [android.sensor.info.activearraysize]

对于支持ultra_high_resolution_sensor的camera设备,当android.sensor.pixelmode设置为sensor_pixel_mode_maximum_resolution,参考坐标系要相应地修改为activearraysizemaximumresolution和precorrectionactivearraysizemaximumresolution.

crop region应用的时机点

crop region应用于raw转其他颜色空间(比如yuv)时,因此对raw buffer不生效

crop region与输出流间的裁剪规则

当crop region的宽高比与stream size的宽高比不一致时,会发生裁减

  • 如果crop region是4:3,那么4:3的stream能看到所有画面, 16:9的stream会出现垂直方向上的裁减
  • 如果crop region是16:9,那么16:9的stream能看到所有画面,4:3的stream会出现水平方向上的裁减

crop region裁减规则说明

  • 假设camera device的active array size为(2000,1500),且支持freeform的crop

    • active array size: 2000×1500 (3 mp, 4:3 aspect ratio)
    • output stream #1: 640×480 (vga, 4:3 aspect ratio)
    • output stream #2: 1280×720 (720p, 16:9 aspect ratio)

case #1: 4:3 crop region with 2x digital zoom

  • crop region: rect(500, 375, 1500, 1125) // (left, top, right, bottom)
    • 640×480 stream: (500, 375, 1500, 1125) (与 crop region相等)
    • 280×720 stream: (500, 469, 1500, 1031) (垂直裁剪)

crop region裁减规则说明

case #2: 16:9 crop region with ~1.5x digital zoom

  • crop region: rect(500, 375, 1833, 1125)
    • 1280×720 stream: (500, 375, 1833, 1125) (与 crop region相等)
    • 640×480 stream: (666, 375, 1666, 1125) (水平裁剪)

crop region裁减规则说明

case #3: 1:1 crop region with ~2.6x digital zoom

  • crop region: rect(500, 375, 1250, 1125)
    • 640×480 stream: (500, 469, 1250, 1031) (垂直裁剪)
    • 1280×720 stream: (500, 543, 1250, 957) (垂直裁剪)

crop region裁减规则说明

case #4: replace 640×480 stream with 1024×1024 stream, with 4:3 crop region

  • crop region: rect(500, 375, 1500, 1125)
    • 1024×1024 stream: (625, 375, 1375, 1125) (水平裁剪)
    • 1280×720 stream: (500, 469, 1500, 1031) (垂直裁剪)

crop region裁减规则说明

crop region精度控制

由于硬件限制或者一些对齐要求,上层在capturerequest里面设置的crop region可能会被camera hal做微调,最终实际生效的crop region会在captureresult中体现。

crop region与sensor输出大小关系

crop region大小不会影响到sensor输出大小,sensor输出不同的size都会被mapping到active array size上来进行计算;这里active array size仅表示当前sensor mode下sensor输出的全尺寸,并不是sensor输出大小

crop region与zoom ratio

从api level 30开始,在logical multicam中强烈建议通过control_zoom_ratio来控制zoom,因为该控制方式会结合光学变焦和数字变焦的能力,甚至可以缩小到1倍zoom以下

  • 通过control_zoom_ratio控制zoom时,crop region设置为默认active array size即可

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

android camera2 api

网站地图