2013年3月31日日曜日

opencv2.4.4をcygwinでつかってみる(1コマ目)

まだ見終わってない2013年冬アニメを消化すべく「はがない」を観ていたところ、幸村は実は女性だったそうで、いままでのハナシはいったいなんだったんだ?とそのストーリー展開に脱力しているわたしがここにいます.

----
さて、わけあってopencvを使いたくなりました.opencvは様々なOS上で画像処理を行うために便利に使えるライブラリです.

むかし、windowsでopencvを使って、USBカメラから採取した画像を処理したことがあり、便利でよろしいじゃないかと思いました.ですが今時のwindowsのAPI関数である.NETとかがよくわからないわたしなのでwindows上でプログラミングするのは今回はやめます.代わりにwindows上で動くunixの一種であるcygwin上でC言語でプログラミングすることとし、unix用のopencvをcygwinにインストールしようとしているところです.cygwinのpackageにopencvも取り込んでほしいものだと思います.

ハナシは脱線しますが、ソフト関係の学校でノートPCが支給され、それにインストールされている環境がUbuntuだと知人から聞きました.卒業するまで、その上で様々なプログラミングを学ぶそうです.これだと入学時は地球人だった人でも、やがてLinux星人へと心技体共に変身してしまうにちがいありません.ちなみにわたしはソフトウエアについてはホビーストレベルであり、仕事にできるほどソフトについて詳しい人ではありませんので、Linux星人には変身しておりません.

さて、正しいのかどうかよくわかりませんが、やってみたら動いているのでこれでいいんだろうというopencvのインストール方法は以下です.

●cygwinはインストールされていて、満足に動く環境が整っているとして以下に続きます.わたしは念のため最新revisionのcygwinにupdateしてから作業しました.cygwin packageを全部インストールしてあります.

●執筆時点での最新版はopencv-2.4.4です.OpenCV-2.4.4a.tar.bz2 をdownloadします.ファイルサイズは70MBぐらいです.以下ではdownloadファイルを自分のhome directoryに置くことにします.
http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.4/OpenCV-2.4.4a.tar.bz2

●解凍する
bzip2 -d OpenCV-2.4.4a.tar.bz2
tar xvf OpenCV-2.4.4a.tar
opencv-2.4.4 ディレクトリができる.openCV-2.4.4a.tarは削除してもOKです.

●ソースファイルを書き換える
1)openCV-2.4.4/modules/legacy/src/calibfilter.cpp    →#undef quadをコメントアウト
2)openCV-2.4.4/modules/legacy/src/epilines.cpp      →#undef quadをコメントアウト
これを修正せずにコンパイルするとquadという変数がエラーで止まります.
軽いバグらしいです.cygwin環境だけで起きるわけじゃなくAndroid環境でも起きるらしいです.
3)openCV-2.4.4/apps/traincascade/imagestorage.h    →#include <stdio.h>を追加
これをしないと最後のところでFILE*なんか知らないという超セコイエラーで止まってギャフンと言ってしまうことになります.

●コンパイル作業directoryをつくる
cd openCV-2.4.4
mkdir release

●cmakeする
cd release
cmake ..     ←末尾の..を忘れずに~
cmakeっていうのは、各々の環境毎に微妙に異なるディレクトリ構成などをサーチして、環境に適するmakefileを生成する役目だと思っていますが、微妙に理解がズレてるかもしれません.つまるところよく知らんのですわ.

●コンパイルする.1時間ぐらいかかるかも.
make
makeっていうのはコンパイルを自動化するツールです.上手く説明できないので説明しませんが、GUIの統合開発環境でもその裏ではmakeが動いてるんだと思います.

●インストールする.といっても/usr/localのあたりにコピーしてるだけですが.
make install

以上、なるべくdownloadしたままでコンパイルしてみましたが、これによってどんな機能がライブラリに取り込まれたのか、そうゆうことは全然知りません.orz

-----
次に、opencvが動くかどうかを実際に動かして試してみます.こちらのページを参考にさせていただきました.  http://blog.livedoor.jp/cs_24/archives/50103595.html

●作業directoryはお好きな場所でどうぞ.

●Cソースファイル   (ファイル名をcv_test.cとします)
#include "stdio.h"
#include "cv.h"
#include "highgui.h"

int main( int argc, char **argv){
  IplImage *imgA = cvLoadImage( "image_sample5.bmp", CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH );

  IplImage *imgB = cvCreateImage( cvGetSize(imgA), IPL_DEPTH_8U, 1 );

  cvCvtColor( imgA, imgB, CV_BGR2GRAY);

  cvSaveImage( "image_result5.bmp", imgB, 0);

  cvReleaseImage( &imgA );
  cvReleaseImage( &imgB );

  printf("End\n");
  return 0;
}

●Makefileというファイル   (ファイル名はMakefile)
INC  = -I/usr/local/include/opencv
LIB  = -L/usr/local/lib
OPT  =  -llibopencv_calib3d \
        -llibopencv_contrib \
        -llibopencv_core \
        -llibopencv_features2d \
        -llibopencv_flann \
        -llibopencv_gpu \
        -llibopencv_highgui \
        -llibopencv_imgproc \
        -llibopencv_legacy \
        -llibopencv_ml \
        -llibopencv_nonfree \
        -llibopencv_objdetect \
        -llibopencv_photo \
        -llibopencv_stitching \
        -llibopencv_ts \
        -llibopencv_video \
        -llibopencv_videostab \
        -lstdc++

cc:
        gcc cv_test.c $(INC) $(LIB) $(OPT) -o cv_test.exe
↑最後のここの空白はTABです.

コンパイル時にライブラリをたくさん呼んでますが、これは生成したライブラリを片っ端から呼んでいるのであって、どれが本当に必要なライブラリなのかは承知しておりません.orz

●cv_testをコンパイルする.no errorになるよう祈りつつ.
make cc

●画像ファイル「image_sample5.bmp」をdownloadし、cv_test.exeと同じdirectoryに置く.
●cv_test.exeを実行する.すると、「image_result5.bmp」という白黒ファイルが生成されればOK.
●なお、cygwinにおける画像ファイルの表示のさせかたは、詳述はしませんけれど、このようにすればできる場合が多いと思います.
startxwin.exe
display image_sample5.bmp
display image_result5.bmp

かしこ

2コマ目へ


人気ブログランキングへ

7 件のコメント:

  1. ソニーOB:佐藤2013年3月31日 11:04

    懐かしいですね、cygwin。
    一時期LinuxとWindowsのダブルブートで使用していたPCでシミュレーションをやってまして、簡単なプログラムはわざわざそのPCで計算させるのも面倒なのでcygwin上で計算させてました。
    後はCで作成さくせいされたプログラムを後輩が持ってきて、若干数値など変更した後にコンパイルしてexeファイルにしたやつを後輩に戻すのにも使用してました。

    返信削除
    返信
    1. ナイス指摘です.
      cygwinをつかう理由は、リブートがかったるいからにつきます.
      そしていまでもcygwin使いなわたしなのでしたー

      削除
    2. ソニーOB:佐藤2013年3月31日 13:35

      エディターはviやemacsって好きじゃなかったというのもありますね。Windowsのエディターで書いてました。
      その昔はTexなどもやってましたがOfficeが出来てからは興味もなくなりました。だから読めても一から書き込みは出来ないですね。
      また仕事用のPCにはいろいろ便利かなという事でWindows上で動くUnixライクなものをインストールしてましたが個人用にはインストールしてませんね。
      話変わりますが、PC用のワンセグチューナを利用してマルチバンドのラジオにできる方法とかやってみたいことはたくさんあったりします。ドライバーの変更と独自のソフトで出来るみたいですね。

      削除
    3. windowsのeditoraというと世代にもよりますが、VZ-editorという往年の名作ソフトがありましたのをご存知でしょうか? MS-DOSの時代ですが.

      マルチバンドラジオをいうと身につまされる出来事が去年ありまして、NHK FMでアニソンの16時間連続放送があり、エアチェックしようとしましたが、エアチェックできるラジカセの類をもはや一台も持ってないことに気づきまして、慄然としたことがありました.

      削除
  2. ソニーOB:佐藤2013年3月31日 14:06

    去年くらいからNHKでもRadikoのようにPCで聞けるようになりましたね。
    RadikoはVPNサーバーに接続して在京民放を聞いたりしています。
    VZ-Editorですか懐かしいですね。もうすっかり忘れていました。

    返信削除
  3. Cygwinでopencv2.4.4を使用しようとしましたが、Gtk-WARNING**:cannot open display
    と言われ、画面が出ません。対応策はありますか。
    OSはWindows7、Cygwinのバージョンは64bitバージョンです。
    ご指導、よろしくお願いいたします。

    返信削除
  4. 遅いレスを承知で。
    私はこのページで勉強させて頂いているもので、
    管理者様とは関係のない人間でございます。

    私も貴方と同じ問題が発生し、Cygwinではなく、同時にインストールされた
    Cygwin-Xで動作させたところ、正常に動きました。ご参考までに

    返信削除