index

第1回の趣旨

Linux

OPenCVサンプルプログラム

サンプルの実行

サンプルプログラムのダウンロード

  1. ここからダウンロード。
  2. ダウンロードしたら適当な場所で解凍しましょう。

まずは,サンプルプログラムを動かしてみよう

  1. samples/open_saveのディレクトリに移動し、以下のコマンドを実行し、コンパイルします。
    $make
  2. コンパイルが通ったら、以下のコマンドを実行します。
    $./main
  3. 何かキーを押すとopen_saveのフォルダにJPG形式で読み込んだ画像を保存し、終了します(save_img.jpg)。
  4. サンプルプログラムは全部で5種類あります(readme参照)。
    他のサンプルプログラムも問題無く動くことを確認して下さい。
  5. 他のサンプルプログラムでは、コマンドライン引数で読み込む処理になっています。
    コマンドライン引数で画像を指定する場合は以下のコマンドを実行します。
    $./main ../images/00.bmp
  6. サンプルで読み込む画像はsamplesフォルダ内のimagesにあります。
    別の画像を読み込んでみましょう。

解説

makeファイル

makeは、修正を加えたファイルの管理と、それらのファイルを再コンパイル・再リンクし、
実行可能ファイルを作成するための作業を簡略化するユーティリティです。
makeはMakefileに記述された指示に従って動作します。
つまり、今まではコンパイルのときに

g++ main main.cpp -g 'pkg-config opencv --cflags' 'pkg-config opencv --libs' -lstdc++ -o

と入力していましたが、それを

make

と入力するだけでよくなります。

Makefileの中身を見てみると、コンパイルに必要な情報が書き込まれていることがわかります。
特に分割コンパイルやたくさんのライブラリを指定するときに、makeは有用なツールになりますので、
その文法など調べてみてください。

コマンドライン引数

コマンドライン引数とは、main関数に渡す引数のことです。
コマンドライン引数のないmain関数では、例えば、

int main(void)

と括弧の中にvoidを書きます。
コマンドライン引数のあるmain関数では、例えば、

int main(int argc, char *argv[])

と書きます。
ここで、int argcは引数の総個数で、char *argv[]は引数の文字列を指すポインタの配列を表します。
argv[0]にはプログラム名が格納されます。
argv[1]以降には、実行時に入力した文字列が格納されます。
また、argcが表す引数の総個数にはプログラム名が含まれます。

例えば、実行時に実行ファイル名の後にスペースを空けて文字列を入力します。

./main ../images/00.bmp

このとき、argc = 2となり、argv[1] = "../images/00.bmp"となります。

OpenCV 1.0の基本構造体

OpenCVにはたくさんの基本構造体があらかじめ定義されています。
もっともよく使う構造体が画像情報を格納するIplImage?構造体です。

typedef struct _IplImage{
    char *imageData; /*画像データへのポインタ*/
    int width; /*画像の幅*/
    int height; /*画像の高さ*/
    int widthStep; /*画像データの幅のバイト数(画素数ではない)*/ ... etc.
}IplImage;

cvLoadImage?でロードされた画像の情報は、このIplImage?構造体として格納されます。
画像がない場合はNULLが返り値として渡されます。

構造体のメンバにアクセスするには、アロー演算子を使います。
例えば、構造体名imgの画像の幅の値を取得したいときは、

img->width

と記述します。

練習1:サンプルを改造してみよう

  1. scanfを使って任意の画像を読み込めるようにしてみよう。
  2. 同様に,scanfを使って画像に処理を加えるパラメータ(スケール、切り取り位置、回転角度など)
    を入力できるようにしてみよう。

課題1:画像処理ソフトを作ろう(基本編)

下記の機能をコマンドで実行できる画像処理ソフトを作成してください

コマンドの例
(読み込み)read ../images/00.bmp
(リサイズ)resize 0.5
  1. 画像ファイルの読み込み・保存
    • コマンドライン引数ではなく、ソフトの起動後でも任意のファイルを指定して読み込めるようにしてください。
    • 下記の画像処理を施した画像を、任意のファイル名で保存できるようにしてください。
  2. リサイズ
    • 任意のスケールを指定してリサイズできるようにしてください。
  3. 切り取り
    • 任意の位置とサイズを指定して画像の一部を切り取れるようにしてください。
  4. 反転
    • 任意の軸(水平、垂直、両方)で反転できるようにしてください。
  5. 回転
    • 任意の位置(x,y座標)、回転角度、スケールを指定して回転できるようにしてください。
  6. その他
    • 画像処理に関する機能を自分で実装してもよいです。

注意事項

提出方法

評価方法

参考になるサイト

質問がある場合


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS