OpenCVをCMakeでコンパイルするときにWITH_OPENNIオプションを付加することになる。だが64bit版のOpenNI、PrimeSensorを使っているとCMakeでConfigureしたときに、OPENNI_LIB_DIR、OPENNI_PRIME_SENSOR_MODULE_BIN_DIRに値が入らない(何を入力しても空白になってしまう)。
どうやら64bit版を使うにはOpenCVFindOpenNI.cmakeの変更が必要でした。その手順メモとなります。
【環境、バージョン】
Windows7
OpenNI win64 1.5.2.23
PrimeSense win64 5.1.0.41
OpenCV 2.3.1
cmake 2.8.7 x86
【手順】
どうやら64bit版を使うにはOpenCVFindOpenNI.cmakeの変更が必要でした。その手順メモとなります。
【環境、バージョン】
Windows7
OpenNI win64 1.5.2.23
PrimeSense win64 5.1.0.41
OpenCV 2.3.1
cmake 2.8.7 x86
【手順】
- Where is the source codeに設定してあるフォルダ配下にあるOpenCVFindNI.cmakeを開く。
- 以下の内容に合わせて二箇所修正する。
- 修正したOpenCVFindNI.cmakeを保存する。
- OPENNI_LIB_DIRにC:/Program Files/OpenNI/Lib64、OPENNI_PRIME_SENSOR_MODULE_BIN_DIRにC:/Program Files/PrimeSense/SensorKinect/Bin64を設定して、Configureボタンをぽちっとなする。
- エラーが出ることなく、それぞれの値が設定されていることを確認する。
- こっからはGenrateしていつもの流れへ。
修正箇所は Finding OpenNI in windows 64bitの OpenCVFindOpenNI.2.patch を参考にしました。
■20~21行目
・修正前
find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS $ENV{OPEN_NI_INCLUDE} "/usr/include/ni" "/usr/include/openni" "c:/Program Files/OpenNI/Include" DOC "OpenNI c++ interface header") find_library(OPENNI_LIBRARY "OpenNI" PATHS $ENV{OPEN_NI_LIB} "/usr/lib" "c:/Program Files/OpenNI/Lib" DOC "OpenNI library") |
・修正後
if(WIN32) if(NOT (MSVC64 OR MINGW64)) find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "$ENV{OPEN_NI_INSTALL_PATH}Include" DOC "OpenNI c++ interface header") find_library(OPENNI_LIBRARY "OpenNI" PATHS $ENV{OPEN_NI_LIB} DOC "OpenNI library") else() find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "$ENV{OPEN_NI_INSTALLPATH64}Include" DOC "OpenNI c++ interface header") find_library(OPENNI_LIBRARY "OpenNI64" PATHS "$ENV{OPEN_NI_LIB64}" DOC "OpenNI library") endif() elseif(UNIX OR APPLE) find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "/usr/incude/ni" "/usr/include/openni" DOC "OpenNI c++ interface header") find_library(OPENNI_LIBRARY "OpenNI" PATHS "/usr/lib" DOC "OpenNI library") endif() |
■27行目
・修正前
find_file(OPENNI_PRIME_SENSOR_MODULE "XnCore.dll" PATHS "c:/Program Files/Prime Sense/Sensor/Bin" DOC "Core library of PrimeSensor Modules for OpenNI") |
・修正後
if(NOT (MSVC64 OR MINGW64)) find_file(OPENNI_PRIME_SENSOR_MODULE "XnCore.dll" PATHS "$ENV{OPEN_NI_INSTALL_PATH}../PrimeSence/Sensor/Bin" DOC "Core library of PrimeSensor Modules for OpenNI") else() find_file(OPENNI_PRIME_SENSOR_MODULE "XnCore64.dll" PATHS "$ENV{OPEN_NI_INSTALL_PATH64}../PrimeSense/SensorKinect/Bin64" DOC "Core library of PrimeSensor Modules for OpenNI") endif() |
※ OpenCVFindOpenNI.2.patch ではパスが"$ENV{OPEN_NI_INSTALL_PATH64}../PrimeSense/Sensor/Bin64"でしたが、私の環境では"$ENV{OPEN_NI_INSTALL_PATH64}../PrimeSense/SensorKinect/Bin64"だったので変更してあります。もしかしたらバージョン、あるいは人の環境によってそれぞれなのかもしれません。
以上です。
コメント
コメントを投稿