最終更新:
mikk_ni3_92 2009年10月28日(水) 17:39:45履歴
現在地 >> メニュー >> OpenCV >> IplImage編01
INDEX:IplImage編00 << IplImage編01 >> IplImage編02
画像の読み込みと表示は
【例】
【メモ】
「cvNamedWindow」をかかずに「cvShowImage」だけにしてもウィンドウが作られ、
表示されるっぽい。
【第1引数】
画像ファイル名。サポートしているのは、
【第2引数】
読み込むときのフラグ。
ここを設定する事で、グレイスケールで読み込んだり、カラー画像で読み込んだりすることができる。
組み合わせて使う事が可能で例えば
※「CV_LOAD_IMAGE_ANYCOLOR」単独の指定は「CV_LOAD_IMAGE_UNCHANGED」と同じ
また、「CV_LOAD_IMAGE_ANYDEPTH」を指定しない場合は、色データは8ビット(0〜255の範囲)に変換される。
付属のリファレンス(opencv.pdf)によると、
画像の保存は「cvSaveImage()」関数できる。
画像ファイル名。
【第2引数】
保存したいもの(CvArrで受けとれるもの)
【第3引数】
オプション(いつのまにか引数がふえました。1.1pre以降から?)
【例】
INDEX:IplImage編00 << IplImage編01 >> IplImage編02
画像の読み込みと表示は
- cvLoadImage()で画像読み込み
- 表示用ウィンドウ用意
- ウィンドウに表示
【例】
... ... 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」だけにしてもウィンドウが作られ、
表示されるっぽい。
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 | -1 | 8ビット |
CV_LOAD_IMAGE_GRAYSCALE | 0 | 8bitのグレイスケール |
CV_LOAD_IMAGE_COLOR | 1 | デフォルト値 |
CV_LOAD_IMAGE_ANYDEPTH | 2 | 任意の深度 |
CV_LOAD_IMAGE_ANYCOLOR | 4 | 任意の色 |
組み合わせて使う事が可能で例えば
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で読み込まれる)
以下は画像を読み込んでそれを表示するプログラムである。
【例】
【メモ】
OpenCVでウィンドウを作成するには、
cvNamedWindow()関数を使い、cvWaitkey()関数で入力待ちにする。
なお、「CV_WINDOW_AUTOSIZE」を「0」と指定するとウィンドウの大きさを変える事が出来る。
【例】
#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引数に保存元を指定する。
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_QUALITY | jpeg画像の品質を指定。0〜100の間で指定。高いほど高品質。デフォルトは95 |
CV_IMWRITE_PNG_COMPRESSION | png画像の圧縮率を指定。0〜9の間を指定。高いほど高圧縮。デフォルトは3 |
CV_IMWRITE_PXM_BINARY | バイナリ保存をするかどうかのフラグ。0か1を指定。デフォルトは1。つまりバイナリ形式で保存する |
- IplImage編01::まとめ
- IplImage編01::まとめ2(cvSaveImage、第3引数の使用例)