現在地 >> メニュー >> OpenCV >> IplImage編01
INDEX:IplImage編00 << IplImage編01 >> IplImage編02



OpenCVの流れ


OpenCVの基本的な流れは
  1. ウィンドウの作成
  2. 画像データの表示
  3. 停止処理
である。
(※「停止処理」がないと、一瞬ウィンドウが作成された後、すぐにプログラムが終了する)

画像の読み込みと表示


画像の読み込みと表示は
  1. cvLoadImage()で画像読み込み
  2. 表示用ウィンドウ用意
  3. ウィンドウに表示
となる。

【例】
... ...
	IplImage *imgA = cvLoadImage("test.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
	if(imgA == NULL){
		std::cerr << "Can't Load Image\n";
		return -1;
	}

	//ウィンドウ作成と表示
	cvNamedWindow("Hello OpenCV",CV_WINDOW_AUTOSIZE);	
	cvShowImage("Hello OpenCV",imgA);
... ...
▲「Hello OpenCV」という名前のウィンドウ上に画像を表示する

【メモ】
「cvNamedWindow」をかかずに「cvShowImage」だけにしてもウィンドウが作られ、
表示されるっぽい。

cvLoadImage()関数


IplImage *cvLoadImage(const char *filename, int iscolor = 1)

【第1引数】
画像ファイル名。サポートしているのは、
  • Windows bitmaps(BMP, DIB)
  • JPEG files(JPEG, JPG, JPE)
  • Portable Network Graphics(PNG)
  • Portable image format(PBM, PGM, PPM)
  • Sun rasters(SR, RAS)
  • TIFF files(TIFF, TIF)

【第2引数】
読み込むときのフラグ。
ここを設定する事で、グレイスケールで読み込んだり、カラー画像で読み込んだりすることができる。
トークン定義値内容
CV_LOAD_IMAGE_UNCHANGED-18ビット
CV_LOAD_IMAGE_GRAYSCALE08bitのグレイスケール
CV_LOAD_IMAGE_COLOR1デフォルト値
CV_LOAD_IMAGE_ANYDEPTH2任意の深度
CV_LOAD_IMAGE_ANYCOLOR4任意の色

組み合わせて使う事が可能で例えば
CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR
のような使い方をしてもよい。

※「CV_LOAD_IMAGE_ANYCOLOR」単独の指定は「CV_LOAD_IMAGE_UNCHANGED」と同じ
また、「CV_LOAD_IMAGE_ANYDEPTH」を指定しない場合は、色データは8ビット(0〜255の範囲)に変換される。


付属のリファレンス(opencv.pdf)によると、
  • 0より大きい → 3チャネルのカラー画像にされる
  • 0の時 → グレースケールになる
  • 0より小さい → そのままの画像で読み込まれる(ただし、バージョン2.0の時点ではRGBAはRGBで読み込まれる)

プログラム全体

以下は画像を読み込んでそれを表示するプログラムである。
【例】
#include <iostream>
#include <cv.h>
#include <highgui.h>

//------------- メイン関数 ---------------//
int main( int argc, char **argv)
{
	//画像読み込み
	IplImage *imgA = cvLoadImage("test.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
	if(imgA == NULL){
		std::cerr << "Can't Load Image\n";
		return -1;
	}

	//ウィンドウ作成と表示
	cvNamedWindow("Hello OpenCV",CV_WINDOW_AUTOSIZE);	
	cvShowImage("Hello OpenCV",imgA);


	cvWaitKey(0); // 0秒待つ => ずっと入力待ち


	cvReleaseImage(& imgA);  //メモリ解放
	cvDestroyWindow("Hello openCV");  //ウィンドウの破棄

	return 0;
}

【メモ】
OpenCVでウィンドウを作成するには、
cvNamedWindow()関数を使い、cvWaitkey()関数で入力待ちにする。

なお、「CV_WINDOW_AUTOSIZE」を「0」と指定するとウィンドウの大きさを変える事が出来る。

画像の保存


画像の保存は「cvSaveImage()」関数できる。

int cvSaveImage(const char *filename, const CvArr *image, const int *params = 0)
【第1引数】
画像ファイル名。

【第2引数】
保存したいもの(CvArrで受けとれるもの)

【第3引数】
オプション(いつのまにか引数がふえました。1.1pre以降から?)

【例】
IplImage *imgA=... ...
... ...
cvSaveImage("OutPut.png",imgA); //保存
▲第1引数に出力ファイル名、第2引数に保存元を指定する。

【第3引数の使い方】

cvSaveImage関数の第3引数は、
  • jpgのクオリティ
  • pngの圧縮率
  • PGM、PPM、PBM画像を「バイナリ形式」か「アスキー形式」どちらで保存するか
という指定ができる。

使い方は、以下のように配列を用意し、定数とそれに対応する値を指定すればよい。
【例】
IplImage *imgA = cvLoadImage("test2.jpg");

… …
int param[]={CV_IMWRITE_JPEG_QUALITY,100};
cvSaveImage("save2.jpg",imgA,param);
… …
定数内容
CV_IMWRITE_JPEG_QUALITYjpeg画像の品質を指定。0〜100の間で指定。高いほど高品質。デフォルトは95
CV_IMWRITE_PNG_COMPRESSIONpng画像の圧縮率を指定。0〜9の間を指定。高いほど高圧縮。デフォルトは3
CV_IMWRITE_PXM_BINARYバイナリ保存をするかどうかのフラグ。0か1を指定。デフォルトは1。つまりバイナリ形式で保存する

サンプルコード


目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます