第38讲 通过CropRegion控制Zoom缩放 - Android Camera2 API

本讲是Android Camera专题系列的第38讲,我们介绍Android Camera2 API专题的通过CropRegion控制Zoom缩放,包括如下内容:

  1. Android Zoom简介

  2. 如何查询当前Camera支持的Zoom能力

  3. 通过Crop Region控制Digital Zoom

    1. Crop Region坐标系
    2. Crop Region应用的时机点
    3. Crop Region与输出流间的裁剪规则
    4. Crop Region精度控制
    5. Crop Region与Sensor输出大小关系
    6. Crop Region与Zoom Ratio

视频在线观看:

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

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: 2000x1500 (3 MP, 4:3 aspect ratio)

    • Output stream #1: 640x480 (VGA, 4:3 aspect ratio)

    • Output stream #2: 1280x720 (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)
    • 640x480 stream: (500, 375, 1500, 1125) (与 crop region相等)
    • 280x720 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)
    • 1280x720 stream: (500, 375, 1833, 1125) (与 crop region相等)
    • 640x480 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)

    • 640x480 stream: (500, 469, 1250, 1031) (垂直裁剪)

    • 1280x720 stream: (500, 543, 1250, 957) (垂直裁剪)

Crop Region裁减规则说明

Case #4: Replace 640x480 stream with 1024x1024 stream, with 4:3 crop region

  • Crop region: Rect(500, 375, 1500, 1125)

    • 1024x1024 stream: (625, 375, 1375, 1125) (水平裁剪)

    • 1280x720 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即可
赞(5)
未经允许不得转载:极客笔记 » 第38讲 通过CropRegion控制Zoom缩放

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Android Camera2参考
Android Camera2参考概述
Android Camera2参数参考
Android Camera2参数参考概述
Android Camera2指南
Android Camera2指南概述
Android Camera HAL开发
Android Camera HAL开发概述
Android Camera2 API
第2讲 Android Camera 架构介绍第3讲 Camera2 API 概述第4讲 Open和Close Camera流程第5讲 GeekCamera2介绍第6讲 Open和Close Camera代码实现第7讲 Hardware Level详解第8讲 AVAILABLE_CAPABILITIES详解第9讲 StreamConfigurationMap详解一第10讲 StreamConfigurationMap详解二第11讲 StreamConfigurationMap实战一第12讲 StreamConfigurationMap实战二第13讲 为什么需要OutputConfiguration第14讲 OutputConfiguration API详解第15讲 Surface Sharing实战第16讲 Deferred Surface实战第17讲 Reprocessable Capture Session详解一第18讲 Reprocessable Capture Session详解二第19讲 App如何实现ZSL功能第20讲 SessionConfiguration详解第21讲 createCaptureSession详解第22讲 SessionParameter实战第23讲 CaptureRequest详解第24讲 如何操作VendorTag第25讲 获取Physical Camera数据流第26讲 CameraCaptureSession详解第27讲 CameraCaptureSession.CaptureCallback详解第28讲 GeekCamera2连拍实战第29讲 SlowMotion实战第30讲 CaptureResult详解第31讲 AE自动曝光 Part 1第32讲 AE自动曝光 Part 2第33讲 AE自动曝光实战第34讲 AE手动曝光第35讲 AE手动曝光实战第36讲 Flash闪光灯控制第37讲 拍照打闪实战第38讲 通过CropRegion控制Zoom缩放第39讲 通过ZoomRatio控制Zoom缩放第40讲 Digital Zoom缩放实战第41讲 Touch AE实战第42讲 AF自动对焦第43讲 AF自动对焦 第二部分第44讲 AF自动对焦实战第45讲 手动对焦实战第46讲 AWB自动白平衡第47讲 AWB自动白平衡实战第48讲 FD人脸检测第49讲 Android13 Camera2 New APIs介绍