OpenCV1.0(x64)

Windows7, VisualStudio2008、プラットフォームx64にてOpenCV1.0が使いたいなう。

最初は簡単かと思っていたが、OpenCV2.0はともかく1.0は64bitに対応していない。当然Program Files(x86)のほうにフォルダがあるし………どうしたらいいの!?


アンサー : http://wtpage.info/program/opencv.html
これほど素晴らしい解説は見たことがありません。多謝。


で、リンク先最下行にあるようにWindows7, VS2008だとコンパイルエラーが出るので、


OpenCV\cv\src\cvhough.cpp(478)

#if defined WIN64 && defined EM64T && _MSC_VER == 1400 && !defined CV_ICC

#if defined WIN64 && defined EM64T && _MSC_VER >= 1400 && !defined CV_ICC

に変更する。
"_MSC_VER == 1400"の部分がVS2005のことを指しているらしいので、"それ以降"に修正⇒コンパイル成功


んで、早速プログラムで使おうとしたところ、


1>c:\program files\opencv\cxcore\include\cxtypes.h(212) : error C4235: 非標準の拡張機能が使用されています : '__asm' キーワードはこのアーキテクチャではサポートされていません


と言われた。
探してみると、cxtyps.h(210)内、cvRound()定義中の

#elif defined WIN32 && !defined WIN64 && defined _MSC_VER
    __asm	// henkou
    {
        fld value;
        fistp t;
    }
    return t;

でつまづいている。調べたところ"__asm"はx64環境では使用できないアセンブリ絡みとのこと。
cvRoundは意外と使うので、上記箇所をコメントアウトしてビルド成功。


・・・しかし待てよ?x64でビルドしてんだから、このエレイフはスルーするんじゃないの?WIN64って定義されてないの?と思い、試しに

#define WIN_64


してみたらコンパイルがサクッと通った(!)。もうちょっと調べてみたら、これはVisualStudio2005⇒2008の変更点らしく、初期設定のプリプロセッサ"WIN32"を"WIN64"に自動で読み替えてくれないことに問題があったらしい。。
そしてプリプロセッサWIN64を追加したら、define効果があるらしい。ちーとも知らんかった。新しいプロジェクト作るときは、忘れず追加するようにしよっと。


しかしよく考えたらプロジェクト作成時の設定はWin32なわけだから、自動でWIN64が追加されないのは当たり前だな・・・。
参考 : http://oshiete1.goo.ne.jp/qa4766454.html



以上。