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
以上。