Camera2APIと画像フォーマット
空中清高
オートモーティブ事業本部
株式会社ディー・エヌ・エー
目次
2
Camera2API
画像フォーマット
YUV_420
1
3
NV21形式のデータを手に入れる4
2
①:Camera2API
3
Camera2API
• Android 5 から追加された
• CameraAPIより細かくカメラを制御できる
• 使い方などは以下の資料などを参考にしてください。
DroidKaigi 2016の「Camera 2 APIはじめの一歩」
https://speakerdeck.com/mhidaka/camera-2-apihazimefalse-bu?slide=3
Camera2 API and beyond
https://speakerdeck.com/tomoima525/camera2-api-and-beyond
書籍:Sweet Android
https://techbooster.booth.pm/items/178225
4
②:画像フォーマット
5
画像フォーマット
画像データを表すためのデータ形式
画像用、映像用など、さまざまなデータ形式がある
6
画像フォーマット:RGB
色の基本:3原色
1pixelの色は3原色の混合具合で表現できる
3変数あれば色は表現できる
7
https://ja.wikipedia.org/wiki/RGB
画像フォーマット:YUV
人間は色の変化より明るさの変化に敏感
色はY:輝度とU:(B - Y), V:(R - Y)で表せる
Yはそのままで、UVを圧縮しても人間
は劣化をあまり感じないのでよい
8
https://en.wikipedia.org/wiki/YUV
③YUV_420
9
YUV_420
YUV形式はUVの圧縮の仕方で様々な分類がある
• YUV_444:圧縮無し
• YUV_422:UとVは2pixel毎に取る
• YUV_420:UとVは4pixel毎に取る
• YUV_420はAndroidのCamera2APIの標準形式
10
YUV_420
YUV_420は総称。データの並べ方の種類がいくつかある。
• I420 や IYUVはデータをY, U, Vと単に並べた形式
• YV12はY, V, Uと並べた形式
• NV12はYのあと、UとVを交互に並べる
• NV21はYのあと、VとUを交互に並べる
11
YUV_420
I420 や IYUV
12
https://en.wikipedia.org/wiki/YUV
YUV_420
NV12
13
https://stackoverflow.com/questions/25659671/how-to-convert-from-yuv-to-ciimage-for-ios
④NV21形式のデータを手に入れる
14
NV21形式のデータを手に入れる
AndroidのCamera2APIにYUV_420を指定したとき、
I420, YV12, NV12, NV21のどれが返ってくるかわからない
ほとんどの端末はNV21のはず
ちなみに私のPixel3で試したところNV21形式でした。
15
NV21形式のデータを手に入れる
16
NV21形式のデータを手に入れる
17
NV21形式のデータを手に入れる
18
NV21形式のデータを手に入れる
• uBufとvBufは実はほとんど同じデータが入っている
• uBufとvBufのサイズは同じ
• uBufのサイズをN、画像のサイズ(w*h)の1/4をMとすると
19
V[0] U[0] V[1] U[1] U[M-1]V[M-1]U[M-2]V[M-2]・・・
vBuf[0] vBuf[1] vBuf[2] vBuf[3] vBuf[N-3] vBuf[N-2] vBuf[N-1]
uBuf[0] uBuf[1] uBuf[2]
・・・
・・・ uBuf[N-3] uBuf[N-2] uBuf[N-1]uBuf[N-4]
NV21形式のデータを手に入れる
20
やったぜ😁
21
ご清聴ありがとうございました
空中清高
オートモーティブ事業本部
株式会社ディー・エヌ・エー

Camera2APIと画像フォーマット