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 |
|
需要注意的是,set的opencv dir是set到你需要的库目录下面,并且务必存在.cmake引导文件,例如:
这俩opencv_world346.lib就是opencv的库文件,下面的OpenCVConfig.cmake就是cmake指引文件,而版本是x64、vc15,一般来说你x64文件夹下应该还有一个vc14,如果你有需要,可以设定到那里。一般来说设定在vc15下面就可以。
OpenCVConfig.cmake为我们制作好了头文件、库文件列表,调用方式如下:
1 |
|
示例
1 |
|
注意事项
代码里面读取图片写的是绝对路径。
就是,你编译出来的可执行文件在build
文件夹下面的Debug
文件夹下(如果你选择的优化级别是Release
,那么就是在Release
文件夹下)。所以你的执行路径不是在工程文件夹根目录,而是在工程根目录\build\Debug\
文件夹下。所以你如果读图写的是
1 |
|
那么你必须把图复制一份放到工程根目录\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 ” 配置项