【问题标题】:C++ Cmake OpenCVC++ 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 有关吗?
谢谢
【问题讨论】:
标签:
c++
opencv
makefile
cmake
【解决方案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
)