簡體   English   中英

Android camera2 API 中預覽圖像大小和捕獲圖像大小有什么關系?

[英]What's relationship between preview image size and captured image size in Android camera2 API?

我正在使用 camera2 API 在 Android 中構建一個圖像處理項目。 我使用 TextureView 獲取預覽屏幕,並使用 ImageReader 獲取圖像幀。 出於圖像處理的目的,我需要在ImageReader中獲取最大尺寸的幀,並且對預覽幀的尺寸沒有任何要求。 所以我分別使用以下代碼設置幀的大小:

        StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        imageDimension = map.getOutputSizes(SurfaceTexture.class)[0];
        texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());

        List<Size> outputSizes = Arrays.asList(map.getOutputSizes(sImageFormat));
        largest = Collections.max(outputSizes, new CompareSizesByArea());
        mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), sImageFormat, 1);

五月份測試的Android設備華為P9:imageDimension為:1280*720; 最大的是:3968*2976。

我發現預覽屏幕效果很好,但是,onImageAvailable 中捕獲的圖像是全黑的,我想什么也沒捕獲。

我嘗試了兩種方法來弄清楚這里發生了什么。 1)我把ImageReader的size設置為imageDimension,發現抓到的圖片是可以的。 2)我將預覽幀的大小設置為最大,發現預覽屏幕是黑色的。

因此,我想知道 ImageReader 中捕獲的圖像的大小是否應該小於預覽幀的大小。 是這樣,如何設置預覽幀的最大分辨率?

無論如何,我的目的是獲得具有最大分辨率的幀以及流暢的預覽屏幕。 歡迎任何建議。 謝謝。

從理論上講,兩個獨立輸出的分辨率應該沒有區別,只要您在CameraDevice.createCaptureSession() 文檔的表格中列出的多個流的分辨率保證范圍內。 如果您以高於這些保證的分辨率運行,事情可能不會按預期進行。

一般來說,我建議保持預覽分辨率 <= 1080p (1920x1080); 許多設備無法以高於該尺寸的分辨率生成平滑的 30fps 預覽; 有些甚至可能需要 720p 或更低。 此外,設備上的 GPU 實際上可能無法處理全分辨率相機輸出,這可能解釋了某些黑色預覽輸出。

ImageReader 沒有理由需要小於預覽; 我懷疑您的預覽尺寸可能太高了。

所以嘗試以下配置:

  • 全分辨率圖像閱讀器
  • 1080p 或類似預覽

在某些設備上,如果捕獲的縱橫比不適合預覽的縱橫比,則捕獲可能需要更長的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM