AND OR  

OpenCVとはオープンソースの画像処理用ライブラリです.
このページは入門者向けの内容になっています.

注) このページはOpenCV 1.0の内容です,注意してください.


以下の項目は別ページに.
OpenCV - 関数リファレンス
OpenCV - HighGUI
OpenCV - 数学演算
OpenCV - 2.x version 2.xについてはこちら
OpenCV for Android Android用はこちら

OpenCV 基礎

基本構造体

最低限覚えておくべき構造体.

IplImage

OpenCVの多くの関数が,構造体IplImageをその引数に取ります.

IplImageのメンバであるimageDataにピクセルの値が格納されており,その画像の幅と高さはそれぞれ,width,heightで表されます.また,widthStepは画像の水平方向1ライン分をバイト単位で表す値であり,これはimageDataのデータに直接アクセスする際に利用されます.

CvPoint

整数型座標系による2次元の点

typedef struct CvPoint {
  int x;  /* x座標 */
  int y;  /* y座標 */
} CvPoint;
  • コンストラクタ
    inline CvPoint cvPoint(int x, int y);

CvSize

矩形のピクセル精度でのサイズ

typedef struct CvSize {
  int width;   /* 矩形の横幅 */
  int height:  /* 矩形の高さ */
} CvSize;
  • コンストラクタ
    inline CvSize cvSize(int width, int height);

関数

メモリ確保・解放,画像入出力関数

cvCreateImage()

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
   要素(ピクセル)毎のチャンネル数.1, 2, 3, 4 のいずれか.
  • 画像サイズ:2x4px,ビット深度:符号なし16bit整数,チャンネル数: 4(BGRA)の場合,
    画像データは下図のようにimageDataに格納されます.
     640x391

cvReleaseImage()

ヘッダと画像データを解放します.

void cvReleaseImage(IplImage** image);

image
   確保した画像ヘッダへのポインタのポインタ.

cvLoadImage()

ファイルから画像を読み込みます.

IplImage* cvLoadImage(const char* filename, int flags=CV_LOAD_IMAGE_COLOR);

filename
   読み込むファイル名. 
flags
   画像がカラー/グレースケールのどちらかとdepthを指定する.
   基本的にCV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLORを指定しておけば問題ない

cvSaveImage()

画像を保存します.

int cvSaveImage(const char* filename, const CvArr* image);

filename
   ファイル名. 
image
   保存する画像. 

画像フォーマットは,filename の拡張子により決定されます.
この関数で保存できるのは,8ビット1チャンネル,あるいは8ビット3チャンネル('BGR' の順)画像だけです.

ピクセルデータへのアクセス

IplImageのメンバ変数であるchar* imageData(画像データへのポインタ)とint widthStep(画像データの横1行分のバイト幅)を用いて参照します.

ビット深度とチャンネル数

CV_32SC1などのマクロはビット深度とチャネル数を表しています.

  • マクロ表記
    CV_[ビット深度][U/S/F]C[チャネル数]

U → 符号なし(unsigned)
S → 符号あり(signed)
F → 浮動小数点

Hello World in OpenCV

  • 画像 lena.jpg を読み込んで表示,result.png という別名で保存する
    (ウィンドウの生成・破棄等はOpenCV - HighGUI参照)