C++ Cmake OpenCV

Posted

技术标签:

【中文标题】C++ Cmake OpenCV【英文标题】: 【发布时间】:2020-10-15 23:13:47 【问题描述】:

我第一次尝试运行 C++ 代码。文档建议下载 CMake 来编译也使用 OpenCV 的项目。现在,我跑了 $cmake 。在项目目录内的终端中,我运行了 $make,我得到了 100% 的构建。当我运行 $g++ Fotokite.cpp 我得到这个错误:

In file included from Fotokite.cpp:8:
./Fotokite.hpp:11:10: fatal error: 'opencv2/core.hpp' file not found
#include "opencv2/core.hpp"
     ^~~~~~~~~~~~~~~~~~
1 error generated.

谁能帮我理解发生了什么? 这与 makefile、opencv 或 cmake 有关吗?

谢谢

【问题讨论】:

如果你今天早些时候做了这个问题中所说的,你需要设置包含目录:https://***.com/questions/64379070/cmake-issues-could-not-find-a-package-configuration-file-provided-by-opencv#comment113843452_64379070 【参考方案1】:

OpenCV 附带一个 CMake 配置文件,这应该是包含它的首选机制。例如,您可以使用现代 CMake 基于目标的 CMake 方法包含 OpenCV,如下所示,例如让我们使用来自 https://docs.opencv.org/master/db/df5/tutorial_linux_gcc_cmake.html 的代码

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;
int main(int argc, char** argv )

    if ( argc != 2 )
    
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    
    Mat image;
    image = imread( argv[1], 1 );
    if ( !image.data )
    
        printf("No image data \n");
        return -1;
    
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;

现在要包含 OpenCV,我们可以使用 find_package。下面的示例 CMake 文件将使用标准安装位置(针对 OpenCV 4.5 构建以用于测试目的)。如果您正在针对 OpenCV 的本地构建进行构建,您可以使用本地构建的安装根目录将 PATH 选项传递给find_package。要包含 OpenCV,您可以使用 target_link_libraries 在安装步骤期间链接 OpenCV CMake 配置文件生成的目标,这将正确管理目标的所有传递依赖项(包括目录、编译器定义、编译器标志、链接库和等效字段用于此目标的传递依赖项)。

cmake_minimum_required(VERSION 3.18)

project( UseOpenCV )

find_package( OpenCV REQUIRED)
add_executable( UseOpenCV main.cpp )
target_link_libraries( UseOpenCV
    PRIVATE
        opencv_highgui
)

【讨论】:

以上是关于C++ Cmake OpenCV的主要内容,如果未能解决你的问题,请参考以下文章

C++跨平台库QT学习10 OpenCV开发环境搭建

CMake基础教程(15)cmake指定C++ 11标准

使用cmake混编c和c++

如何使用CMake构建c++项目

使用 C++ 脚本自动化 CMake 构建

使用CMake组织C++工程3:CMake 函数和宏