質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

1451閲覧

BitmapとImageProxyの違いがよくわかりません。

Sakana4432

総合スコア4

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2022/11/24 03:54

Android開発初心者です。

以下のコードの中では、fun bindCameraUseCases() の imageAnalyzer でCameraXからRGBA8888フォーマットのimageを受け取ったあと、fun detectObjects(image: ImageProxy)で bitmapBufferにRGBのビットだけ渡しているようです。

よく分からない点は、imageAnalyzerから受け取ったのは"RGBA"、bitmapBufferは”ARGB”なので、planes[0]ではimageのAlphaではなく、Redが切り落とされるのではないのでしょうか。

またplaneを実行した場合、bitmapBufferはRGB888になるということでしょうか。

解答よろしくお願いいたします。

Main_Activity.kt

1private fun bindCameraUseCases() { 2 3 // CameraProvider 4 val cameraProvider = 5 cameraProvider ?: throw IllegalStateException("Camera initialization failed.") 6 7 // CameraSelector - makes assumption that we're only using the back camera 8 val cameraSelector = 9 CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build() 10 11 // Preview. Only using the 4:3 ratio because this is the closest to our models 12 preview = 13 Preview.Builder() 14 .setTargetAspectRatio(AspectRatio.RATIO_4_3) 15 .setTargetRotation(fragmentCameraBinding.viewFinder.display.rotation) 16 .build() 17 18 // ImageAnalysis. Using RGBA 8888 to match how our models work 19 imageAnalyzer = 20 ImageAnalysis.Builder() 21 .setTargetAspectRatio(AspectRatio.RATIO_4_3) 22 .setTargetRotation(fragmentCameraBinding.viewFinder.display.rotation) 23 .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) 24 .setOutputImageFormat(OUTPUT_IMAGE_FORMAT_RGBA_8888) 25 .build() 26 // The analyzer can then be assigned to the instance 27 .also { 28 it.setAnalyzer(cameraExecutor) { image -> 29 if (!::bitmapBuffer.isInitialized) { 30 // The image rotation and RGB image buffer are initialized only once 31 // the analyzer has started running 32 bitmapBuffer = Bitmap.createBitmap( 33 image.width, 34 image.height, 35 Bitmap.Config.ARGB_8888 36 ) 37 } 38 detectObjects(image) 39 } 40 } 41 42 // Must unbind the use-cases before rebinding them 43 cameraProvider.unbindAll() 44 try { 45 // A variable number of use-cases can be passed here - 46 // camera provides access to CameraControl & CameraInfo 47 camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalyzer) 48 49 // Attach the viewfinder's surface provider to preview use case 50 preview?.setSurfaceProvider(fragmentCameraBinding.viewFinder.surfaceProvider) 51 } catch (exc: Exception) { 52 Log.e(TAG, "Use case binding failed", exc) 53 } 54 } 55 56 private fun detectObjects(image: ImageProxy) { 57 // Copy out RGB bits to the shared bitmap buffer 58 image.use { bitmapBuffer.copyPixelsFromBuffer(image.planes[0].buffer) } 59 60 val imageRotation = image.imageInfo.rotationDegrees 61 // Pass Bitmap and rotation to the object detector helper for processing and detection 62 objectDetectorHelper.detect(bitmapBuffer, imageRotation) 63 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/11/24 06:48 編集

実際に動作させてはどうなったのでしょうか。 とりあえず [画像解析]( https://developer.android.com/training/camerax/analyze?hl=ja ) でどうなっているのかを確認されると良いかもしれません。 >アプリは、出力画像ピクセルを YUV 色空間(デフォルト)または RGBA 色空間の形式に設定します。RGBA 出力形式を設定すると、CameraX は内部で画像を YUV 色空間から RGBA 色空間に変換し、ImageProxy の最初のプレーン(他の 2 つのプレーンは不使用)の ByteBuffer に、次の順序で画像ビットを格納します。 > >ImageProxy.getPlanes()[0].buffer[0]: alpha >ImageProxy.getPlanes()[0].buffer[1]: red >ImageProxy.getPlanes()[0].buffer[2]: green >ImageProxy.getPlanes()[0].buffer[3]: blue > :
Sakana4432

2022/11/24 07:52

先程に引き続きありがとうございます。 なるほど、それでBufferがARGBになっているのですね。 追加でもう一点宜しいでしょうか。 この画像をOpenCVに渡したいのですが、OprnCvはARGBに対応していないようです。 この場合Jpegに変換して、opencvで読み込めばAlpha値はそぎ落とされて、RGBになるのでしょうか。 よろしくお願いいたします。
jimbe

2022/11/24 08:16

質問されるのは結構ですが、 teratail はまずご自身でやってみるのが前提です。 プログラムには(普遍的な意味で)唯一の完全な正解はありませんので、まずは(様々な資料を当たりながら)試行錯誤してみては如何でしょうか。
Sakana4432

2022/11/24 09:16

すいません、まだまだ勉強が足りないようです。 試行錯誤はしているのですが、時間も有限ですので手一杯な状況です。 今回の質問は解決とさせていただきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問