OpenCVの超有名画像(^_^;)
一口にYUV形式の画像といっても、
いくつかのパターンが存在する。
画像加工しようにも
メモリ制約が厳しく、OpenCVなどの
便利なライブラリを組み込んで使えない...
そんな時のために、泥臭く1ピクセルずつコピーしていきながら
回転後の画像データを作成する、なんて処理を考えてみた。
そもそもYUVとは?
画像をあつかう話なので、色の表現の規格なのだろうという想像はできる。
それぞれ、輝度(Y)と、輝度との色差(輝度と青の差:U、輝度と赤の差:V)を意味しており、
特段、何かの略というわけでもないようだ。
白黒テレビからカラーテレビに移り変わっていくあたりから、使われ始めたらしい。
人間の目は色の変化よりも明るさの変化に敏感で、色差成分を減らしても
不自然だと感じにくいという視覚特性を活かして、画像を圧縮するための技術である。
などといくつか種類がある。
4:4:4が圧縮なしの高画質で、現在よく使われているのが 4:2:0 なんだとか。
Webで調べても、わかりやすく説明しているサイトには中々めぐり合わない。
さて、今回グルグル回したいのは、YUV420でサンプリングされた画像である。
さらに、あまり難しくならないように、データの持ち方が、Y ⇒ U ⇒ V の順で
都合よく並んでいるタイプのもののみを扱う。
イメージ的には、こうなる。
YYYY
YYYY
UUVV
画像回転の話を少々
なぜか、タブレットで真っ直ぐに向けて撮ったはずの画像が
後で確認すると上下反転しているなんてことはないだろうか。
普通に撮影すると、jpeg画像としてカメラに記録されるが、
実はその時にExif情報という撮影日、撮影機器、解像度などの詳細な
画像情報も一緒に記録している。
ここに画像の回転方向を表すOrientationという情報が含まれている。
分かりにくいのであるが、どうすれば正しい向きになるのかを表す数値である。
Orientation
- そのまま
- 上下反転
- 180度回転
- 左右反転
- 上下反転して、さらに時計回りに270度回転
- 時計回りに90度回転
- 上下反転して、時計回りに90度回転
- 時計回りに270度回転
撮影時の持ち方やブレによって、おそらくジャイロセンサが
その様な向きであると検出しているからなのだろう。
せっかく調べたので、回転させるプログラムの指定パラメータとして利用する。
ところで、肝心のYUV形式の画像をみるためのソフトというのが
なかなか見つからない...
30日のトライアル版であるが、結構使えるのでご紹介
YUVTool に同梱されている YUVplayer
http://www.sunrayimage.com/index.html
サンプル画像を開いてみたところ
この形式の画像を扱いたい
YUV-420-progressive-planar
<IYUV, I420>
その次は、好きなjpeg画像を変換するためのツールが必要だ。
これも、なかなか YUV 420 にできるものが見つからない...
Converseen これはフリーで使えるようだ。
なぜか Formats指定が
YUV
- (CCIR 601 4:1:1 or 4:2:2)
なのだが、
これで変換してできた
ファイルを先のYUVplayerで開いてみると...
期待通りになった!!!
これでようやく
確認準備が整ったので
次回は回転させる
プログラムを
試してみたい。