Introduction
OpenCVSharp を使って、Webカメラから取得した YUV 形式のフレームを BGR 形式に変換する際の疑問について。
OpenCV で利用される cv::cvtColor を使って YUV 形式を BGR 形式の変換する際、指定できるフラグは下記になる。
1 | //YUV 4:2:0 formats family |
が、末尾の _NV12 とか _YVYU は何?って話。
What’s that?
簡単に言えば、YUV 形式における細部の詳細。
変換元の YUV 形式のフレームが実際に何であるかを明示する必要がある。
詳細は
が詳しい。
以降は OpenCV で定義されている名称に絞った一覧。
格納方式
| 名前 | 概要 |
|---|---|
| Packed format (Interleaved) | Y、U、V を単一配列に格納。よくある RGB や BGR 形式と同じ並び |
| Planer format | Y、U、V をそれぞれ異なる配列に格納 |
| Semi-planar format | Y のみ異なる配列に格納し、U、V を単一配列に格納 |
フォーマット名
OpenCVSharp なら VideoCapture.FourCC プロパティを見れば、現在のフォーマットがわかる。
| 名前 | 格納方式 | YUV 比率 | 別名 |
|---|---|---|---|
| NV12 | Semi-planar format | 4:2:0 | |
| NV21 | Semi-planar format | 4:2:0 | |
| YV12 | Planer format | 4:2:0 | |
| IYUV | Planer format | 4:2:0 | IYUV |
| I420 | Planer format | 4:2:0 | I420 |
| UYVY | Packed format | 4:2:2 | Y422、UYNV |
| Y422 | Packed format | 4:2:2 | UYVY、UYNV |
| UYNV | Packed format | 4:2:2 | UYVY、Y422 |
| YVYU | Packed format | 4:2:2 | |
| YUY2 | Packed format | 4:2:2 | V422、YUYV、YUNV |
| YUYV | Packed format | 4:2:2 | YUY2、V422、YUNV |
| YUNV | Packed format | 4:2:2 | YUY2、V422、YUYV |
Wrap up
- YUV 比率が同じだからと言って適当に指定するとおかしな結果になる
