Ubuntu11.04 で OpenCV2.2 を使ってWindows用の実行ファイルをクロスコンパイルする

 

 

まだ書いてる途中だよ。

 

 

ちょっと遊んでみるよ。

 

Virtual Boxのインストール

まず、Ubuntu11.04 は Virtual Box の仮想PCにインストールする。

Virtual Boxは下記サイトから入手

http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html

 

Ubuntu11.04をVirtual Boxにインストール

Ubuntuのイメージは下記サイトの日本語 Remix CDイメージをダウンロードする。

Virtual Box用の仮想マシンもあるけれどバージョンが古いので今回はやめておく。

http://www.ubuntulinux.jp/products/GetUbuntu

 

Virtual Boxへのインストール方法は他サイトを見てもらうことにして、インストール後の設定をいくつか。

Ubuntuを起動後、[デバイス] – [Guest Additionsのインストール] をクリックしておく。

 

一旦、Ubuntuをシャットダウンしておいて、Virtual Boxの設定で[ディスプレイ]の項目の[3Dアクセラレーションを有効化]をチェックおく。

Unityを使わなければいらないかも。

 

これ以降、Ubuntuにログインするときにログイン画面の下部で[Ubuntu]を選ぶとUnityで起動し、[Ubuntu クラシック]を選ぶとGNOMEで起動する。

 

 

OpenCV2.2をインストール

いよいよ下記サイトを参考にOpenCV2.2をインストールする。

必要な作業はページ中央部分からの「OpenCV 2.2をインストールする」の部分。

http://d.hatena.ne.jp/ser1zw/20110430/1304104548

今回は少し手順が異なっている。

 

1.依存ライブラリ、ツールをインストールする。

不要なものもあるけどとりあえずインストールしておく。

1行で掛けないので改行してある。

$ sudo apt-get install mingw32 cmake pkg-config build-essential \
 libtbb2 libtbb-dev \
 libgtk2.0-0 libgtk2.0-dev \
 libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev libpngwriter0-dev libpngwriter0c2 \
 libjpeg62 libjpeg62-dev libjpeg-progs \
 zlib1g zlib1g-dev libjasper-dev libjasper-runtime libjasper1 \
 pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools \
 ffmpeg libavcodec-dev libavcodec52 libavformat52 libavformat-dev \
 libgstreamer0.10-0 libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev \
 libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev \
 libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev \
 python-numpy libpython2.7 python python-dev \
 openexr libswscale0 libswscale-dev libeigen2-dev libopenexr-dev

 

 

2.CMAKE用のファイルを作成する。

各自のhomeにCmake用のファイル Toolchain-mingw32.cmake をテキストエディタで作成する。

<内容>

# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)

# which compilers to use for C and C++
SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)

# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH  /usr/i586-mingw32msvc /home/ユーザーアカウント/opencv_win )

# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

ユーザーアカウントの部分はそれぞれ変更する。

 

 

3.OpenCVのソースを取得 & Make する。

下記サイトからWin用のソースコード OpenCV-2.2.0-win.zip をダウンロードする。

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/

 

展開したファイルに下記のパッチをあてる。

https://code.ros.org/trac/opencv/ticket/937

 

/OpenCV-2.2.0/tests/cv/src/tabruteforcematcher.cpp

/OpenCV-2.2.0/tests/cv/src/afeatures2d.cpp

エラーが出るのでBruteForceMatcher 使用箇所を潰す。

たぶんテンプレート関数周りだと思うけど、追うのが面倒なのでとりあえず潰す。

 

$ cd OpenCV-2.2.0
$ mkdir release
$ cd release
$ cmake -D CMAKE_TOOLCHAIN_FILE=/home/ユーザーアカウント/Toolchain-mingw32.cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/home/ユーザーアカウント/opencv_win -D WITH_GTK=ON ..
$ make && make install

 

Makefile をつくる。

内容はこんな感じかな。

CXX = i586-mingw32msvc-g++
CXXFLAGS = -I/home/ユーザーアカウント/opencv/include -I/usr/local/include
LDFLAGS = -L/home/ユーザーアカウント/opencv/bin -llibopencv_calib3d220 -llibopencv_contrib220 -llibopencv_core220 -llibopencv_features2d220 -llibopencv_ffmpeg220 -llibopencv_flann220 -llibopencv_gpu220 -llibopencv_highgui220 -llibopencv_imgproc220 -llibopencv_legacy220 -llibopencv_ml220 -llibopencv_objdetect220 -llibopencv_ts220 -llibopencv_video220
TARGET = $@
SOURCE = $@.cpp

TARGET:
	$(CXX) -o $(TARGET).exe $(SOURCE) $(CXXFLAGS) $(LDFLAGS)

.PHONY: clean
clean:
	rm -f *.o *~

 

これで hoge.cpp をmakeするときは、

$make hoge

ってすると、実行ファイル hoge ができる。

でも、hogeは WindowsのEXEファイルだから hoge.exe にリネームしてWindows で実行すれば動く。

けど、-o オプションを変更して .exe でつくられるようにすればいいんだろうけど、今のところうまくいっていない。

コメントを残す