[英]installing OpenCV-2.3.0-win-superpack on visual studio 2010
[英]How to properly link Visual Studio project with OpenCV (superpack) using CMake
我目前正在对旧的 VHS 磁带进行数字化处理。 对于后处理,我想用 C++ 和 OpenCV 实现自定义算法。我已经在 Matlab 中实现了一个有前途的原型,但它只能处理单个图像(在我的版本 (R2010a) 中无法读取/写入视频文件) ; 另外,Matlab 太慢了)。
可悲的是,我 - 一遍又一遍 - 坚持使用 CMake。虽然我想知道......这不会那么困难。 我经常遇到 CMake 的问题,所以我会在这里详细介绍 go。 我希望您不仅可以指出我在这里做错了什么,还可以对我对 CMake 的使用提出一般性建议。 也许我做错了,我不知道。
这是我到目前为止所做的:
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 (一)
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 (...) 文件效果很好。 事实上,我没有收到任何警告或错误:
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 ==========
更多详情:
我的问题:
@VARIABLE_OR_SOMETHING@
是什么? 我试图找出它们的来源,它们似乎是在OpenCVConfig.cmake
中设置的。 但它们应该如何工作? 它们应该在“构建时”由 Visual Studio 评估吗? 如果有,他们是如何评价的?谢谢你和最好的问候,罗伯特
这些变量可能与 CMake 的configure_file命令有关,它允许您指定参数化模板文档(通常扩展名以.in
结尾),您可以将 CMake 变量替换到文件中以创建它。 它们在运行 CMake 时发生的configure_file
调用时被评估。我认为发生的事情是你所采用的脚本将有一个父 CMake 脚本,它将使用这些变量的内容配置该文件,并且然后在add_subdirectory
调用中使用它。 我建议检查任何描述顶级运行过程的自述文件(或任何定义这些变量然后手动替换它们的文件)。
我现在修好了。 我想我可以肯定地说整个混乱不是我的错。 很抱歉回答我自己的问题。
这是我首先尝试的(当然,这对我不起作用,但它可能对其他人有用):
正如 Martin Foot 在他的回答中指出的那样,*.in 文件是模板,应该在 CMake 配置期间填写正确的值。 但是,我使用的是 OpenCV 超级包,其中包含所有二进制文件。 出于这个原因,我从来没有执行过这样的配置步骤,因为我认为只有在您想要编译某些东西时才需要这样做。
但是,似乎 - 即使您使用带有预构建二进制文件的超级包 - 您也必须配置项目才能生成 OpenCVConfig.cmake。 Vadim Pisarevsky在 OpenCV bug tracker 中表示。
出于某种原因,这对我不起作用。 我像往常一样启动 Cmake GUI,将其指向 OpenCV 目录并点击“配置”。 我什至绝望地点击了“生成”。 然而,没有出现 OpenCVConfig.cmake。
所以我不得不进一步拨打 go...
这才是真正有用的:
在最近提交的与 OpenCVConfig.cmake 相关的错误报告中, Sergiu Dotenco 指出“当前提供的 OpenCVConfig.cmake 非常脆弱”等等。幸运的是,Sergio 还提供了一个自定义的 FindOpenCV.cmake 脚本。 通过使用他的脚本,我终于能够生成一个有效的 Visual Studio 解决方案。
顺便说一下,这是我当前的顶级 CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT("VhsDejitterizer")
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules" ${CMAKE_MODULE_PATH})
SET(OPENCV_ROOT_DIR "C:/dev/vs2010sp1_win32/opencv/2.3.1")
#SET(OPENCV_USE_GPU_LIBS ON)
FIND_PACKAGE(OpenCV REQUIRED)
ADD_SUBDIRECTORY("src")
我在项目的新cmake-modules/
子文件夹中安装了 Sergio 的FindOpenCV.cmake
脚本。 同样重要的是要注意我正在使用(与我使用“配置模式”的原始设置相反)最小的 FIND_PACKAGE 变体( “模块模式” )。 仅当使用最小变体时,CMake 才会在 CMake 模块路径中Find<package-name>.cmake
脚本。 有关 FIND_PACKAGE 的信息,请参阅CMake 文档。
我还找到了本指南,如果您是图书馆开发人员,它是关于如何正确使用 CMake 的: http://www.vtk.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file
我现在修好了。 我想我可以肯定地说整个混乱不是我的错。 很抱歉回答我自己的问题。
你修好了? 我遇到了同样的问题,我按照你的解决方案做了,但是没有用。 当 CMake 执行命令 FIND_PACKAGE( OpenCV REQUIRED )
它将是 output:
One or more OpenCV components were not found:
calib3d
contrib
core
features2d
flann
highgui
imgproc
legacy
ml
objdetect
video
CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:91 (MESSAGE):
Could NOT find OpenCV (missing: OPENCV_CALIB3D_LIBRARY
OPENCV_CONTRIB_LIBRARY OPENCV_CORE_LIBRARY OPENCV_FEATURES2D_LIBRARY
OPENCV_FLANN_LIBRARY OPENCV_HIGHGUI_LIBRARY OPENCV_IMGPROC_LIBRARY
OPENCV_LEGACY_LIBRARY OPENCV_ML_LIBRARY OPENCV_OBJDETECT_LIBRARY
OPENCV_VIDEO_LIBRARY) (found version "2.3.1")
最后,我使用命令 include_directories TARGET_LINK_LIBRARIES 来包含所有必要的目录或文件,它以一种笨拙的方式工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.