IplImageの構造について基本的に理解しておくべきこと

OpenCV(1系)では,画像を IplImage という構造体で管理しています。

プログラムの流れとしては、画像をメモリに読み込み、その後、各画素値を参照しながら加工を行っていくことが多いようです。

そのため、画素の構造をきちんと理解しておいたほうがよいと思い、下にまとめてみました。

使用する関数

IplImage* cvCreateImage(CvSize size, int depth, int channels); ・・・ ヘッダの作成とデータ領域の確保を行う

size・・・画像の幅と高さ
depth・・・画像要素のビット深度
IPL_DEPTH_8U – 符号無し 8 ビット整数
IPL_DEPTH_8S – 符号有り 8 ビット整数
IPL_DEPTH_16U – 符号無し 16 ビット整数
IPL_DEPTH_16S – 符号有り 16 ビット整数
IPL_DEPTH_32S – 符号有り 32 ビット整数
IPL_DEPTH_32F – 単精度浮動小数点数
IPL_DEPTH_64F – 倍精度浮動小数点数
channels・・・要素(ピクセル)毎のチャンネル数

 

この関数を使用してIplImageを生成すると、画像用のメモリの先頭のアドレスは,IplImage構造体のメンバ変数の imageData に保存されることになります。

 

iplimg_struct
 

 

通常、 (x,y) のアドレスは

imageData + (widthStep*y) + (x*bpp)

で表現できます。

ここで,bpp とは一画素あたりに必要なメモリの量で、IplImageのメンバ変数depthとnChannelから

bpp = (depth/8)*nChannel

となります。

今回はRGBがそれぞれ16bit(IPL_DEPTH_16U)なので depthが16,、RGBAの4つのチャネルがあるので、nChannels=4 になります。

つまり,16/8*4 で一画素あたり 8byte 必要になります。

コラム

OpenCVの勉強に購入した本です。どちらも良著だと思います。これから学ばれる人は是非参考にしてください!

OpenCV プログラミングブック 第2版 OpenCV 1.1対応 OpenCV プログラミングブック 第2版 OpenCV 1.1対応

「OpenCV プログラミングブック」は2版あるので気を付けてください。こちらが新しい方です。この本は実例が豊富ですので、OpenCVについて理解がしやすいです。一通り例題をこなすと、OpenCVについての知識が深まります。

 

 

 

詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識 詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識

分厚いですが、オライリー本の例にもれず、良著だと思います。上の本でOpenCVの面白さを知った人には、手放せない本になるはずです。

 

コメントを残す

サブコンテンツ

このページの先頭へ