画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

05 | 2017/06 | 07
S M T W T F S
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【OpenCV】IplImage構造体

OpenCVの画像データを管理しているのがIplImage構造体になります。
C言語のBITMAPINFO、.NETのBitmapクラスみたいなものでしょうか。

OpenCVではこのIplImage構造体をOpenCVの各種関数の引数として渡します。

そこで、IplImage構造体の定義のヘッダファイル(cxtypes.h)をのぞいてみると、

typedef struct _IplImage
{
    int  nSize;           
  /* sizeof(IplImage) */
    int  ID;                  
/* version (=0)*/
    int  nChannels;      
/* Most of OpenCV functions support 1,2,3 or 4 channels */
    int  alphaChannel;  /* ignored by OpenCV */
    int  depth;        
/* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,
                           IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */

    char colorModel[4];
/* ignored by OpenCV */
    char channelSeq[4];
/* ditto */
    int  dataOrder;        
/* 0 - interleaved color channels,
                                     1 - separate color channels.
                                     cvCreateImage can only create interleaved images */
    int  origin;                
/* 0 - top-left origin,
                                     1 - bottom-left origin (Windows bitmaps style) */
    int  align;                  
/* Alignment of image rows (4 or 8).
                                      OpenCV ignores it and uses widthStep instead */
    int  width;                 
/* image width in pixels */
    int  height;                
/* image height in pixels */
    struct _IplROI *roi;      /* image ROI. if NULL, the whole image is selected */
    struct _IplImage *maskROI;
/* must be NULL */
    void  *imageId;           
/* ditto */
    struct _IplTileInfo *tileInfo;
/* ditto */
    int  imageSize;    
       /* image data size in bytes
                                         (==image->height*image->widthStep
                                         in case of interleaved data)*/
    char *imageData;       
/* pointer to aligned image data */
    int  widthStep;            /* size of aligned image row in bytes */
    int  BorderMode[4];    
/* ignored by OpenCV */
    int  BorderConst[4];    
/* ditto */
    char *imageDataOrigin;
/* pointer to very origin of image data
                                         (not necessarily aligned) -
                                         needed for correct deallocation */
}
IplImage;

となっています。
基本的にcvCreateImageもしくはcvLoadImage
関数でIplImage構造体のデータを確保するので、IplImageの全てを知らなくても、なんとかなるのですが、主なメンバ変数は以下のとおりです。

nSizeIplImage構造体のサイズ
nChannelsチャンネル数 1,2,3,4のどれか
depth

1画素あたりのビット数
実質使えるのはIPL_DEPTH_8U(符号なし8ビット)と一部でIPL_DEPTH_16S(符号付き16ビット)ぐらい。
24ビットカラー(R,G,B各8ビット)の場合、8ビット、3チャンネル

 nChannels = 3、depth = IPL_DEPTH_8U
とする。

origin画像データの原点(基準)
0:左上原点(デフォルト)
1:左下原点
originはcvShowImageやcvSobelなどの画像の上下の向きが必要な場合に用いられます。
注)
originの値を変えても画像データの並びは変わりません。
width画像の幅(画素数)
height画像の高さ(画素数)
imageSize画像データのサイズ(バイト数) (= widthStep * height
imageData画像データへのポインタ
画像の輝度値を参照する場合は、このポインタを参照します。
このポインタのアドレスは16バイト境界になるように調整(アライメント)されています。つまり、アドレスが0x09BE0050などのように最下位の値が0となります。
SSEの都合?
widthStep画像データの幅のバイト数(画素数ではありません。
ビットマップ(*.bmp)データと同様に4バイト単位に調整されています。
8バイト単位があるのか?は不明

<確保例>

【ファイルから確保する場合】
  IplImage* src_img = cvLoadImage("TestImage.bmp",
          CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);

【新規に確保する場合】 24Bitカラー(8Bitモノクロ3チャンネルの場合)
  IplImage* src_img = cvCreateImage(
          cvSize(640, 480), IPL_DEPTH_8U, 3);
  ※depthの値は、符号のある/なしを区別するため、数値(8など)を指定せず、下記定数の
    中から指定すること。
    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 - 倍精度浮動小数点数

ただし、使い終わったら解放するのもお忘れなく。
   cvReleaseImage(&src_img);


関連ページ
【OpenCV】IplImageの輝度値を参照、設定する
【OpenCV】IplImageからBitmapを確保する
【C++/CLI】System::String^からchar*へ変換

  


Loading...
スポンサーリンク

この記事に対するコメント

参考になります ありがとうございます
【2009/10/13 00:47】 URL | あめだま #- [ 編集]


この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://imagingsolution.blog107.fc2.com/tb.php/99-e4a2fb13
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計