Windows下编译opencv并使用VsCode+Cmake工具编写测试程序

Windows下编译opencv并使用VsCode+Cmake工具编写测试程序

在windows下利用cmake工具编译一个opencv项目的时候,在make的中总会报错:

D:/ProgramFiles/opencv-3.4.8/modules/core/include/opencv2/core/cvstd.hpp:648: undefined reference to `cv::String::deallocate()'
CMakeFiles\test.dir/objects.a(main.cpp.obj): In function `cv::String::operator=(cv::String const&)':
D:/ProgramFiles/opencv-3.4.8/modules/core/include/opencv2/core/cvstd.hpp:656: undefined reference to `cv::String::deallocate()'
CMakeFiles\test.dir/objects.a(main.cpp.obj): In function `cv::Mat::~Mat()':

我使用的opencv是下载的编译好的包,直接安装解压的。后来在stackoverflow上看到一种说法,需要自己编译opencv才行,于是我开始行动了。

1.准备环境

  1. 下载好之后,将压缩包解压到任意路径。

  2. 然后添加环境变量:右键我的电脑——属性——高级系统设计——环境变量——选择用户变量里的Path,点击编辑——新建——将刚才解压的文件中的bin路径*\WinGW\mingw64\bin填写进去,*是根目录,根据自己的路径修改。点击确定。

  3. 进入bin目录,将mingw32-make.exe复制一个副本,然后改名make.exe.
    在这里插入图片描述

  4. 此时win+R调出CMD命令,输入cmake --version应该出现cmake的版本号,表明配置成功。

  • Opencv,提取码:w42u
    或者去opencv官网下载:https://opencv.org/releases/,选择自己需要的opencv版本在这里插入图片描述
    我们下载源码,下载好之后,解压到任意位置。

    附OpenCV的Win安装包:OpenCV3.4.11 ,提取码:lefd

  • Cmake,提取码:b6fd

    下载好之后直接解压到任意位置。和WinGW一样将解压出的bin目录添加到环境变量路径Path中。然后可以在CMD中输入cmake --version,如果有版本号则配置成功。

至此准备工作完成。

2.生成MakeFile并编译Opencv

CMD中输入cmake-gui会跳出cmake的图形化界面。如果没有跳出来的话,可能是环境变量配置出问题了,检查能否输出cmake的版本号,如果能的话进入目录*\cmake-3.18.3-win64-x64\bin,应该有cmake-gui.exe可执行文件,双击点开。

在这里插入图片描述

  • 选择source目录为解压的opencv源码根目录

  • 在opencv根目录下创建一个文件夹,命名为build,在cmake-gui界面中选择Build目录为新建的build目录

  • 点击configure

在这里插入图片描述

编译器C和C++选择*/WinGW/mingw64/bin/x86_64-w64-mingw32-gcc.exe*/WinGW/mingw64/bin/x86_64-w64-mingw32-g++.exe。点击Finish。

  • 然后开始配置。

    • 在配置的过程中可能会报错下载超时,不用担心,我们去下载这三个文件。可以打开build目录下的CMakeDownloadLog.txt,搜索cmake_download,应该能搜索到三个,后面第一个路径是你的本地保存路径,第二个路径是下载路径,我们需要分别在三个下载路径下下载好这三个下载失败的文件。这三个文件都需要外网来下载,我提供我下载好的文件,我的opencv版本是opencv-3.4.8,我没试过版本不同能不能用我下载好的文件,如果不行你需要自己去下载。

      opencv_ffmpeg_64.dll,提取码:u9mq

      opencv_ffmpeg.dll,提取码:j94k

      ffmpeg_version.cmake,提取码:ugok

    • 下载好之后,首先将三个文件移动到*\opencv-3.4.8\.cache\ffmpeg目录下。

      然后我们需要改名字,打开CMD,使用cd命令进入到ffmpeg文件夹下,然后使用命令certutil -hashfile ffmpeg_version.cmake MD5分别获取三个文件的MD5码,将文件名改成md5-filename的格式,如:在这里插入图片描述

    • 重新点击configure按钮,可以发现没有报错了。如果报错说安装了python高版本,需要python2.7,可以不用管。如果后面行不通的话,可以自己去官网下载python2.7版本,然后异曲同工配置python的环境变量。

    • 点击Generate生成Makefile文件。

    至此,编译工作已经完成了一大半

  • 接下来需要使用WinGW进行make。这里可以直接使用CMD命令行。我使用的是VsCode.这里没有差异。推荐使用命令行,不用额外的配置了。

    在命令行中使用cd进入到opencv目录里的build文件夹,然后输入make -j8命令进行编译,这里-j8是使用多线程的意思,如果电脑不支持可以直接输入make。接下来就是等待,大约15分钟。

    编译完成之后,可以进入到build目录下,bin文件夹里有许多可执行文件,lib文件夹里有生成的一些库。

  • 最后,将编译好的Opencv加入到环境变量中。即把bin文件夹所在目录加入到Path路径中。编译Opencv完成。

3.测试:在VsCode中使用Cmake编译Opencv项目

假设VsCode已经配置好了,如果没有配置好可以看我的这一篇博客,过程很简单:VsCode配置

  1. 首先新建一个文件夹。然后建子文件夹build和src,新建文本CMakeLists.txt,名称不能有错误,否则VsCode的Cmake工具检测不到CMakeLists.txt无法进行Cmake生成Makefile。随便放一张图片。最终文件夹是这个样子的:

在这里插入图片描述

  1. 目前所有文件夹和文本都是空的,我们一步步来填写。首先打开CMakeLists.txt,将下面的内容复制到其中:

    cmake_minimum_required(VERSION 3.4)#最小版本要求
    project(opencv_test)#工程名称
    
    ##set(OpenCV_DIR "D:\\ProgramFiles\\opencv-3.4.8\\build")#如果报错找不到OpenCV的话,将注释取消掉,然后修改成自己的目录
    find_package(OpenCV REQUIRED)
    include_directories(${OpenCV_INCLUDE_DIRS})
    link_directories(${OpenCV_LIBRARY_DIRS})
    
    aux_source_directory(./src SrcFiles)
    set(EXECUTABLE_OUTPUT_PATH ../bin)#可执行文件的输出路径
    
    add_executable(test ${SrcFiles})
    target_link_libraries(test ${OpenCV_LIBS})#将OpenCV库链接到你的可执行文件上
    

    然后重启VsCode,会发现VsCode开始自动配置Cmake

  2. 在src目录下新建main.cpp

    #include"opencv2\opencv.hpp"
    #include<iostream>
    using namespace std;
    using namespace cv;
    
    int main()
    {
        Mat img = imread("../1.jpg");
        imshow("test",img);
        waitKey(0);
    }
    
  3. 打开一个新的终端

在这里插入图片描述

输入:

cd build
cmake ..
make
..\bin\test.exe

如果前面的步骤都没有错的话,此时应该已经显示出图片了。

4.结语

问题解决了,但是还是需要探讨一下原因。

要在VS Code中使用CMake配置OpenCV C++项目,可以按照以下步骤进行操作: 1. 确保已经安装了Visual Studio Code和CMake,并将它们添加到系统的环境变量中。 2. 创建一个新的文件夹作为您的项目文件夹,并在其中创建一个CMakeLists.txt文件。在CMakeLists.txt中,输入以下内容: ```cmake cmake_minimum_required(VERSION 3.0) project(YourProjectName) find_package(OpenCV REQUIRED) add_executable(YourExecutableName main.cpp) target_link_libraries(YourExecutableName ${OpenCV_LIBS}) ``` 这个CMakeLists.txt文件指定了项目的最低CMake版本、项目名称以及要使用OpenCV库。 3. 在项目文件夹中创建一个main.cpp文件,并编写您的OpenCV C++代码。 4. 打开Visual Studio Code,选择“文件”->“打开文件夹”,并选择您的项目文件夹。 5. 安装CMake Tools插件。在Visual Studio Code的扩展面板中搜索"CMake Tools"并安装。 6. 在Visual Studio Code的底部状态栏,找到一个齿轮图标,点击它以打开CMake Tools。 7. 在CMake Tools的侧边栏中,选择您的项目文件夹并点击“配置”。 8. 在弹出的对话框中,选择一个构建目录(可以是您项目文件夹下的子文件夹),然后选择CMake工具链。 9. 在弹出的对话框中,输入以下参数并保存: - "cmake.configureOnOpen": false - "cmake.buildDirectory": "build" 这些参数将配置CMake Tools以在打开项目时不自动运行CMake,并将生成的文件放在名为"build"的文件夹中。 10. 回到CMake Tools的侧边栏,点击“配置”按钮,然后选择“生成”按钮。这将运行CMake生成您的项目。 11. 在CMake Tools的侧边栏中,点击“构建”按钮来编译您的项目。 12. 您可以在Visual Studio Code的终端中运行您的可执行文件,或者根据需要进行调试。 这样,您就可以在VS Code中使用CMake配置OpenCV C++项目了。记得根据您的具体项目情况修改CMakeLists.txt和main.cpp文件。祝您成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值