WindowsでgolangからOpenCVを呼び出してみた

すんなりとできなかったのでメモ。

golang 64bit版をインストール


http://golang.org/dl/
まずは、windows-amd64.msiをダウンロード。

環境変数を設定
PATH: C:\Go\bin;

golangのコード

こういった感じでgolangからOpenCVをコールするサンプルコード。

package main

/*
#cgo pkg-config: opencv
#include <cv.h>
#include <highgui.h>
*/
import "C"
import "fmt"
import "unsafe"

func main() {
    fmt.Println("Hello World!")
    text := C.CString("Hello World!")
    defer C.free(unsafe.Pointer(text))
    C.cvNamedWindow(text, 1)
    img := unsafe.Pointer(C.cvCreateImage(C.cvSize(640, 480), C.IPL_DEPTH_8U, 1))
    C.cvSet(img, C.cvScalar(0, 0, 0, 0), nil)
    var font C.CvFont
    C.cvInitFont(&font, C.CV_FONT_HERSHEY_SIMPLEX|C.CV_FONT_ITALIC, 1.0, 1.0, 0, 1, 8)
    C.cvPutText(img, text, C.cvPoint(200, 400), &font, C.cvScalar(255, 255, 0, 0))
    C.cvShowImage(text, img)
    C.cvWaitKey(0)
}

MinGW-w64をインストール

http://mingw-w64.sourceforge.net/download.php
Mingw-builds project - native toolchains using trunkのものをSourceForgeからダウンロード。
x86_64を指定して、golangを64bitで揃える。(揃えないと動かなかった。。。)

環境変数を設定
PATH: C:\Program Files\mingw-w64\x86_64-4.9.1-posix-seh-rt_v3-rev0\mingw64\bin;

OpenCVをインストール

http://opencv.org/
OpenCV for Windowsをダウンロード。
圧縮ファイルなので実行すると展開されます。
C:/OpenCV/opencvXXXに展開(XXXばopencvのバージョン)

環境変数を設定
PATH: C:\OpenCV\opencv249\build\x64\vc12\bin;

pkg-configを作成

C:\OpenCV\opencv249\opencv.pc を作成する。

# Package Information for pkg-config

prefix=C:/OpenCV/opencv249
exec_prefix=${prefix}/bin
libdir=${prefix}/build/x64/vc12/bin
includedir=${prefix}/build/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 2.4.9
Libs: ${libdir}/opencv_core249.dll ${libdir}/opencv_imgproc249.dll ${libdir}/opencv_highgui249.dll ${libdir}/opencv_ml2   49.dll ${libdir}/opencv_video249.dll ${libdir}/opencv_features2d249.dll ${libdir}/opencv_calib3d249.dll ${libdir}/ope n c v_objdetect249.dll ${libdir}/opencv_contrib249.dll ${libdir}/opencv_legacy249.dll ${libdir}/opencv_flann249.dll
Cflags: -I${includedir} -I${includedir}/opencv -I${includedir}/opencv2

これでgoの「#cgo pkg-config: opencv」が読み込まれます。

環境変数を設定
PKG_CONFIG_PATH: C:\OpenCV\opencv249;

Visual Studio 2013 の Visual C++ 再頒布可能パッケージをインストール

http://www.microsoft.com/ja-JP/download/details.aspx?id=40784
vcredist_x64.exeをダウンロード。

pkg-config(OpenCV)でvc12のdll(ライブラリ)を読み込んでいるのでVCのexeが必要。

参考:Device Updaterエラーメッセージ: MSVCP120.dllが見つからない (Windows)
http://www.native-instruments.com/jp/support/knowledge-base/show/2399/device-updater-msvcp120.dll-windows/

実行結果

f:id:MSitter29:20140728125300j:plain
別ウィンドウでhello worldが出力されました。これで成功!(のはず)

はまったところ

  1. 64bitにするなら、golangMinGW-w64を64bitで揃えないとダメ
  2. pkg-configの書き方、使い方
  3. VC++再頒布可能パッケージが必要

golangOpenCVもよく知らないので
道筋もゴールもよくわからずに試行錯誤しましたー。