zoukankan      html  css  js  c++  java
  • cmake编译opencv程序

    来源:http://blog.csdn.net/tobacco5648/article/details/8643934

    用cmake来编译OpenCV程序还是很方便的。

        在D:/test目录下有一个含有opencv api的源文件facedetect.cpp,现要将其编译为DisplayImage.exe程序,首先创建一个文件CMakeLists.txt文件,内容如下:

    cmake_minimum_required(VERSION 2.8)                                       //版本
    project( DisplayImage )                                                                          //工程
    set(OpenCV_DIR E:/opencv)                                                                 //设置OpenCV所在目录,问后面的find_package提供位置
    find_package( OpenCV REQUIRED )                                                  //会在OpenCV所在目录查找配置文件OpenCVConfig.cmake
    add_executable( DisplayImage facedetect.cpp )                               //向工程添加源文件
    target_link_libraries( DisplayImage ${OpenCV_LIBS} )                   //添加链接库

        接着,在工程目录下运行cmake -G "MinGW Makefiles" . 

        此命令在当前目录下生成makefile文件

        最后,直接运行make,生成可执行文件


    来源:http://blog.csdn.net/zhuqibing/article/details/17184939

    二、用CMake自动配置OpenCV

    没用CMake的时候,要想在VS中使用OpenCV,配置起来相当麻烦,比如包含路径、链接路径、链接库都要配置。有了CMake,只需要2个命令:

    find_package(OpenCV REQUIRED)

    target_link_libraries(*** ${OpenCV_LIBS} )

    就可以轻松搞定。

    注:

    1、OpenCV和OpenCV_LIBS这2个名字中,每个字母的大小写不能乱用,因为CMake设置了这样的固定大小写;

    2、REQUIRED参数,其含义是指这个共享库是否是工程必须的,如果使用了这个参数,说明这个链接库是必备库,如果找不到这个链接库,则工程不能编译;

    3、***是你项目要生成的exe或者动态库名字。

    在你的CMakeLists.txt中添加上面2个命令,用CMake进行configure,提示错误:

    CMake Error at CMakeLists.txt:6 (find_package):

    By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has

    asked CMake to find a package configuration file provided by "OpenCV", but

    CMake did not find one.

    解决方法:添加电脑的环境变量——>系统变量——>新建,变量名:OpenCV_DIR,变量值:D:softopencvuild,重启电脑,再用CMake进行configure和generate,然后打开解决方案***.sln,进入VS,编译,运行。

    点评:为什么要添加环境变量呢?

    CMake可以自动找到安装在你电脑里的OpenCV头文件和库(动态库和静态库),但是你要告诉它你的OpenCV安装在哪,要不然搜索你的整个硬盘?很显然,CMake不会这样做。

    注意:有一种情况下,需要使用OpenCV的项目不需要target_link_libraries(*** ${OpenCV_LIBS} ):

    你的解决方案中包含多个项目,其中一个项目A用来生成动态库,该项目的CMakeLists.txt中包含target_link_libraries(*** ${OpenCV_LIBS} );该解决方案中的项目B依赖项目A,那么项目B的CMakeLists.txt中就不需要包含target_link_libraries(*** ${OpenCV_LIBS} )。


  • 相关阅读:
    auto_ptr的VC版本源码剖析
    在VS2017中配置VLD(Visual Leak Detector)内存泄漏检测工具
    QT+VS中使用qDebug()打印调试信息无法显示
    QT+VS后中文字符乱码问题
    外观模式
    装饰模式(包装模式)
    组合模式
    桥接模式
    适配器模式
    单例模式
  • 原文地址:https://www.cnblogs.com/xiaoming123abc/p/6707754.html
Copyright © 2011-2022 走看看