cmake-windows-opencv


第三方库的使用方式

任何一个第三方库的使用
- a) 手动在visual studio (或者其它IDE 里面)指定头文件与库文件 (最直接 但繁琐)
- b) 在CMakeLists.txt中指定头文件与库文件 (也比较繁琐)
- c) 在CMakeLists.txt中使用find_package

在linux下 一般直接使用c)方式,apt-get安装后常用软件包(如 opencv)后可以直接使用find_package找到, 因为默认安装到/usr/include /usr/lib/ /usr/local/include/ /usr/local/lib, 所以可以在被cmake搜索到。

而windows下,采用a)方式极为繁琐(虽然可以使用vs的属性表), b)方式与配置属性表几乎一样 c)方式应该是最佳方案(后面会详细讲解如果实现)

使用CMake生成OpenCV的工程

首先必须要编译opencv,一般使用cmake+vs。

进入OpenCV的源代码目录

执行下面指令, 生成项目文件

# 外部编译路径
mkdir build
# 指定安装路径为“H:\cpp\opencv\opencv”,编译好之后会安装到该目录
cmake .. -DCMAKE_INSTALL_PREFIX=H:\cpp\opencv\opencv -G "Visual Studio 12 2013"

# 生成64bit
cmake .. -DCMAKE_INSTALL_PREFIX=H:\cpp\opencv\opencv -G "Visual Studio 12 2013 Win64"

可以把BUILD_opencv_world打开 这样就不会有很多的lib库 而是 集中在world.lib中,不过对vs版本有要求

windows下 编译动态库会产生 bin/dll 和lib/.lib 其中.lib只是生成是给调用者的接口,运行时仍需要.dll (一般加入环境变量中)。 编译静态库则只有 staticlib/.lib 文件较大。 而linux下静态库就是.a 动态库是.so

使用Visual Studio2013编译安装OpenCV

这一步也可以直接用命令行进行,不过这样更直观

进入上面的build的目录,找到OpenCV.sln,打开,接下来分别编译生成并安装ReleaseDebug使用的库文件:

生成Debug版的Win32库文件并安装
这里写图片描述

可以直接运行安装,它自动会先编译所有项目(ALL_BUILD)再安装(INSTALL)
这里写图片描述

生成Release版本的Win32库文件
这里写图片描述

最终的安装路径中的文件应该为

检查下x86下的库文件,x86/vc14/libx86/vc14/bin中均有Debug(结尾有d的库文件)和Release的库文件

测试是否可用

新建一个CMake工程

/-testcv 
|- src  
| |- main.cpp  
|
|- CMakeLists.txt 
/

main.cpp代码

#include <iostream>  
#include <opencv2\opencv.hpp>  
int main(int argc, char *argv[]) { 
  cv::Mat frame; 
  cv::VideoCapture camera(0); 
  while(1) { 
    camera >> frame; 
    cv::imshow("camera", frame); 
    cv::waitKey(30); 
  } 
  return  0; 
}

CMakeLists.txt代码

cmake_minimum_required(VERSION 3.0)

set(PROJECT_NAME testcv)
project(${PROJECT_NAME})



set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)

file(GLOB_RECURSE HEADERS *.h)
source_group("Header Files" FILES ${HEADERS})
aux_source_directory(src DIR_SRCS)

# 通过设置该变量让cmake可以找到opencv
SET(OpenCV_DIR "H:\\cpp\\opencv\\opencv")
# 把OpenCV安装目录的根目录和bin目录包含到环境变量中也可以让cmake找到。

find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
    include_directories(${OpenCV_INCLUDE_DIRS})
    add_executable(${PROJECT_NAME} ${DIR_SRCS} ${HEADERS})
    target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
endif()

打开命令行,进入test目录:

    mkdir build
    cd build
    cmake ..

进入build目录,打开testcv.sln,查看一下配置中的库文件和头文件都没有问题
Debug
这里写图片描述

Release
这里写图片描述

然后设置testcv为启动项,编译运行,可以打开摄像头并看到录像。OK

总结

  1. 使用CMake来管理需要大量配置库和头文件的项目。
  2. OpenCV使用官方的exe文件安装后可用,但是自己编译安装后才可以使用CMake来自动管理。
  3. 如果需要生成x64的库,在第一步的时候,指定生成x64就可以。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值