VScode+CMake+Opencv配置

VScode+CMake+Opencv配置

更新:直接去看总结!!!

Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异)_opencv cmake-CSDN博客

注意opencv和c++版本的对应关系!!!

使用CMake基于GCC编译器调用Opencv时,不能直接调用!!!->需要使用CMake基于MinGW预先编译一遍Opencv

CMake来编译OpenCV,细致教程_cmake编译opencv-CSDN博客

安装opencv

下载链接:Releases - OpenCV

3.4.6版本,点击windows,下载下来即可。不需要配置环境变量。

实际工程调用

实际工程调用的时候,只需要在cmakelist里面添加如下语句即可指定版本并链接、包含相关的库、头文件。大小写请严格遵守!

cmake查找库的原理是:调用库自带的config文件,根据其指引添加头文件、库文件列表。所以我们只需要指定其config文件的地址就可以。config文件一般都是库名+config.cmake命名,如:若为opencv库,则为:OpenCVConfig.cmake,你set一个dir到它所在位置就可以让cmake自行调用

1
2
set(OpenCV_DIR  D:/opencv/opencv3.4.6/opencv/build/x64/vc15/lib/)
find_package(OpenCV REQUIRED)

需要注意的是,set的opencv dir是set到你需要的库目录下面,并且务必存在.cmake引导文件,例如:

这俩opencv_world346.lib就是opencv的库文件,下面的OpenCVConfig.cmake就是cmake指引文件,而版本是x64、vc15,一般来说你x64文件夹下应该还有一个vc14,如果你有需要,可以设定到那里。一般来说设定在vc15下面就可以。

OpenCVConfig.cmake为我们制作好了头文件、库文件列表,调用方式如下:

1
2
3
4
#添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})
#链接库文件
target_link_libraries(main ${OpenCV_LIBS})

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cmake_minimum_required(VERSION 2.8)

project(test)

set(DEFAULT_CXX_STANDARD 11)

set(OpenCV_DIR D:/opencv/opencv3.4.6/opencv/build/x64/vc15/lib/)#库路径换成自己电脑上的

find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(main ${PROJECT_SOURCE_DIR}/main.cpp)

target_link_libraries(main ${OpenCV_LIBS})

注意事项

代码里面读取图片写的是绝对路径。

就是,你编译出来的可执行文件在build文件夹下面的Debug文件夹下(如果你选择的优化级别是Release,那么就是在Release文件夹下)。所以你的执行路径不是在工程文件夹根目录,而是在工程根目录\build\Debug\文件夹下。所以你如果读图写的是

1
img = imread("1.jpg");

那么你必须把图复制一份放到工程根目录\build\Debug\文件夹下,否则必然会报错。

undefined reference to cv::imwrite

CMake找不到Opencv的模块,但是CMake显示所有库都已经正确链接。

解决方法:

使用CMake基于GCC编译器调用Opencv时,不能直接调用!!!->需要使用CMake基于MinGW预先编译一遍Opencv

CMake来编译OpenCV,细致教程_cmake编译opencv-CSDN博客

使用Opencv3.4.6的话,单次configure就可以generate了

使用 MinGW 在 Windows 上安装 OpenCV3+ ( Cmake g++ make)_mingw32-make install-CSDN博客

generate之后需要在build文件夹下打开终端,执行命令mingw32-make install

如果C++版本在11以上,会出现以下报错:

这个错误表明在代码中使用了 C17 标准中已弃用的动态异常规范(dynamic exception specifications)。在 C17 中,动态异常规范已被移除,因此编译器会报错。

尝试在CMake的GUI中勾选ENABLE_CXX:

error: ‘D3D11_TEXTURE2D_DESC’ was not declared in this scope

尝试在CMake的GUI中取消勾选WITH_OPENCL_D3D11_NV

总结:直接看这里

经过一天的测试,得到的结果是:以上教程全是垃圾!!!全是垃圾!!!淦!!

根据上述方法会出现各种错误。

以下是完整的配置过程:

VSCode+Opencv(C++)+Win10 - 知乎 (zhihu.com)

在 msys2/mingw 下安装及编译 opencv_ippicv_2021.8_win_intel64_20230330_general.zip-CSDN博客

第一步:下载Opencv

下载链接:Releases - OpenCV

选择较新的,并且有红色星号的版本。比如:

第二步:编译Opencv

需要提前安装MinGW和Cmake。

教程见

使用CMake基于GCC编译器调用Opencv时,不能直接调用!!!->需要使用CMake基于MinGW预先编译一遍Opencv

打开CMake的GUI。选择opencv的sources文件夹,和自行创建的build文件夹。

点击configure会出现编译器选择。因为要是使用MinGW中的C/C++编译,所以Configure的选择如下:

一定选择第二个!!!不要使用默认编译器

在弹出框中如下选择:

  • C选择 mingw-w64\bin\gcc.exe
  • C 选择 mingw-w64\bin\g.exe

点击Generate。然后搜索OPENCV_ENABLE_NONFREE,进行勾选。可以解锁付费模块。

然后重新configure和generate。

第三步:安装Opencv

在build文件夹下使用minGW32-make install安装

安装时间超过半个小时,建议去吃顿饭

可能会在35%的地方报错:

error: could not convert template argument 'cv::obsensor::ComPtr<IKsControl>::__T_IID_getter' from 'const IID& (cv::obsensor::ComPtr<IKsControl>::)()' {aka 'const GUID& (cv::obsensor::ComPtr<IKsControl>::)()'} to 'const IID& (*)()' {aka 'const GUID& (*)()'}

原因: obsensor backend seems not to be supported on gcc.

解决方案 :在cmake命令后增加 “ -DWITH_OBSENSOR=OFF ” 配置项

后续

将 opencv 安装路径 目录opencv-build\install\x64\mingw\bin 中 所有后缀是.dll 的应用程序扩展复制到 C:\Windows\System32 中


VScode+CMake+Opencv配置
http://example.com/2024/03/06/VScode+CMake+Opencv配置/
作者
Mr.Yuan
发布于
2024年3月6日
许可协议