現在、古いVHSカセットをデジタル化しています。後処理については、C++ と OpenCV でカスタム アルゴリズムを実装したいと考えています。私はすでにMatlabで有望なプロトタイプを実装していますが、単一の画像しか処理できません(私のバージョン(R2010a)ではビデオファイルの読み取り/書き込みはできません;また、Matlabは遅すぎます)。
悲しいことに、私は - 何度も何度も - CMake に行き詰まっています。とは思いますが… これはそれほど難しいことではありません。私はよくCMake で問題を抱えていたので、ここで詳しく説明します。ここで私が間違っていることを指摘するだけでなく、私の CMake の使用法についても一般的なアドバイスをいただければ幸いです。たぶん私はそれをすべて間違ってやっています、私にはわかりません。
これが私がこれまでに行ったことです:
- sourceforge からOpenCV 2.3.1 スーパーパックをダウンロードしました。スーパーパックには、OpenCV ソース コード、インクルード、そして最も重要なすべての主要プラットフォーム用の .lib および .dll ファイルが含まれています。このため、OpenCV を自分でビルドする必要はありません。それはすでに行われています。使用/リンクするだけです。
- のスーパーパックをインストール (展開) しました
C:\dev\vs2010sp1_win32\opencv\2.3.1
。 - に改名
C:\dev\vs2010sp1_win32\opencv\2.3.1\OpenCVConfig.cmake.in
しましたOpenCVConfig.cmake
。 C:\dev\VhsDejitterizer
次の構造のプロジェクト用のフォルダーを作成しました。
VhsDejitterizer/
CMakeLists.txt (A)
src/
CMakeLists.txt (B)
libvhsdejitter/
CMakeLists.txt (C)
vhsdejitter/
util.h
util.cpp
main/
CMakeLists.txt (D)
main.cpp
個々の CMakeLists.txt ファイルの内容は次のとおりです。
/CMakeLists.txt (A)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT("VhsDejitterizer")
CMAKE_POLICY(SET CMP0015 OLD)
FIND_PACKAGE(OpenCV REQUIRED
NO_MODULE
PATHS "C:/dev/vs2010sp1_win32/opencv/2.3.1"
NO_DEFAULT_PATH)
ADD_SUBDIRECTORY("src")
/src/CMakeLists.txt (B)
ADD_SUBDIRECTORY("libvhsdejitter")
ADD_SUBDIRECTORY("main")
/src/libvhsdejitter/CMakeLists.txt (C)
UNSET(source_files)
FILE(GLOB_RECURSE source_files "*.h" "*.cpp")
ADD_LIBRARY(libvhsdejitter STATIC ${source_files})
TARGET_LINK_LIBRARIES(libvhsdejitter ${OpenCV_LIBS})
UNSET(source_files)
/src/main/CMakeLists.txt (D)
UNSET(source_files)
FILE(GLOB_RECURSE source_files "*.h" "*.cpp")
ADD_EXECUTABLE(main ${source_files})
TARGET_LINK_LIBRARIES(main libvhsdejitter ${OpenCV_LIBS})
UNSET(source_files)
Visual Studio .sln (...) ファイルの構成と生成はうまく機能します。実際、警告やエラーは 1 つも表示されません。
Configuring done
Generating done
ただし、Visual Studio で「メイン」プロジェクトをビルドしようとすると失敗します。
1>------ Build started: Project: main, Configuration: Debug Win32 ------
1>Build started 04.04.2012 14:38:47.
1>InitializeBuildStatus:
1> Touching "main.dir\Debug\main.unsuccessfulbuild".
1>CustomBuild:
1> All outputs are up-to-date.
1>ClCompile:
1> main.cpp
1>LINK : fatal error LNK1104: cannot open file '@CMAKE_LIB_DIRS_CONFIGCMAKE@/libopencv_gpu.so.@OPENCV_VERSION@@OPENCV_DLLVERSION@@OPENCV_DEBUG_POSTFIX@.lib'
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.59
========== Build: 0 succeeded, 1 failed, 2 up-to-date, 0 skipped ==========
詳細:
- オペレーティング システム: Windows 7 Pro 64 ビット
- IDE: ビジュアル スタジオ 2010 SP1
- CMake バージョン: 2.8.4
- ターゲット プラットフォーム (つまり、コンパイル/ビルド対象): Windows 32 ビット
私の質問:
- 「メイン」プロジェクトを正常にビルドするにはどうすればよいですか? つまり、そのエラーを修正する方法は?
- これらは何
@VARIABLE_OR_SOMETHING@
ですか?どこから来たのか調べてみたところ、 に設定されているようですOpenCVConfig.cmake
。しかし、それらはどのように機能するのでしょうか? それらは「ビルド時」に Visual Studio によって評価されることになっていますか? もしそうなら、それらはどのように評価されますか? - おそらく、私が非常に洗練されたフォルダー構造を設定していることにお気づきでしょう。これについてアドバイスはありますか?ライブラリとプロジェクトをどのように整理していますか? ベストプラクティスはありますか? それらはどこに文書化されていますか?
ありがとう、よろしく、ロバート