一次搞定!如何用VSCode编写OpenCV

首先,需要安装MinGW编译器,支持编译C++代码。

安装MinGW编译器

  1. 下载MinGW,下载链接为:
    https://nchc.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/sjlj/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0.7z

  2. 将MinGW解压缩在某个文件夹中。例如:C:\software\mingw64
    mingw路径

  3. 配置环境变量。

    3.1 右键桌面此电脑,选择属性。
    此电脑-属性
    3.2 选择高级系统设置。
    高级系统设置
    3.3 打开环境变量。
    环境变量
    3.4 设置path,添加一条路径,为刚刚mingw的下bin文件夹的路径。C:\software\mingw64\bin。
    path环境变量
    path变量

  4. 测试环境变量。win+r打开运行界面,输入cmd进入命令行,输入gcc -v,敲回车,查看gcc是否正常工作。
    gcc正常工作

配置Vscode环境,支持编译C++

不用怎么配置,新建一个.cpp文件,用vscode打开,右下角提示是否安装推荐的C++扩展,安装之后就可以编译cpp文件了。
安装完成后,发现新增了如下的VSCode扩展。
新增的C++扩展

下载opencv3

进入官网,https://opencv.org/releases/,下载opencv3,选择Windows进行下载。Opencv3 Windows
安装到指定目录下即可。
opencv3

下载Cmake

下载路径是:https://cmake.org/download/

cmake
将其解压到自定义目录下,我的路径为:C:\software\cmake\bin
cmake文件夹
点开cmake-gui.exe。
where is source code,选择C:\software\opencv3\opencv\sources
where is to build the binaries,是自己设置的文件夹,选择C:\software\opencv3\opencv\build\x64\mingw。
路径

点击左下角的Configure,选择MinGW Makefiles,Specify native compiler。
Configure
Compiler,选择Mingw文件夹bin下的gcc.exe和g++.exe。路径是C:\software\mingw64\bin。
gcc, g++
显示configure done。

一定注意这一步,如果不执行这一步,后面依赖的world等dll会缺失。

在执行完后,把关于python的都给取消勾选。勾选BUILD_opencv_world,WITH_OPENGL和BUILD_EXAMPLES,不勾选WITH_IPP、WITH_MSMF和ENABLE_PRECOMPILED_HEADERS(如果有的话),CPU_DISPATCH选空。

这里有一个巨大的坑等着我去踩,解决下面的问题耗费了我两天的时间。如果有后面的人发现自己的opencv C++程序无法正常读取.mp4等视频文件,显示mp4视频文件为零帧、VideoCapture 的isOpened显示为false,是因为在camke的时候没有成功安装ffmpeg。

也就是,执行完configure之后,显示


  Video I/O:
    DC1394:                      NO
    FFMPEG:                      NO
      avcodec:                   NO
      avformat:                  NO
      avutil:                    NO
      swscale:                   NO
      avresample:                NO
    GStreamer:                   NO
    DirectShow:                  YES

此时,按照下面的步骤进行。

  1. Ctrl+A,复制指示区的显示内容。
    描述区的文件
  2. 复制到一个笔记本里面,搜索其中的failed关键词,找到关于ffmpeg的下载失败内容。内容显示,opencv_ffmpeg.dll, opencv_ffmpeg_64.dll, ffmpeg_version.cmake三个文件下载失败,无法正常运行。
FFMPEG: Download: opencv_ffmpeg.dll
Try 1 failed

=======================================================================
  Couldn't download files from the Internet.
  Please check the Internet access on this host.
=======================================================================

CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
  FFMPEG: Download failed: 6;"Couldn't resolve host name"

  For details please refer to the download log file:

  C:/software/opencv3/opencv/build/x64/mingw/CMakeDownloadLog.txt

Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:227 (download_win_ffmpeg)
  CMakeLists.txt:701 (include)


FFMPEG: Download: opencv_ffmpeg_64.dll
Try 1 failed

=======================================================================
  Couldn't download files from the Internet.
  Please check the Internet access on this host.
=======================================================================

CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
  FFMPEG: Download failed: 6;"Couldn't resolve host name"

  For details please refer to the download log file:

  C:/software/opencv3/opencv/build/x64/mingw/CMakeDownloadLog.txt

Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:227 (download_win_ffmpeg)
  CMakeLists.txt:701 (include)


FFMPEG: Download: ffmpeg_version.cmake
Try 1 failed

=======================================================================
  Couldn't download files from the Internet.
  Please check the Internet access on this host.
=======================================================================

CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
  FFMPEG: Download failed: 6;"Couldn't resolve host name"

  For details please refer to the download log file:

  C:/software/opencv3/opencv/build/x64/mingw/CMakeDownloadLog.txt

Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:227 (download_win_ffmpeg)
  CMakeLists.txt:701 (include)

  1. 按照上面的提示报错路径,打开C:/software/opencv3/opencv/build/x64/mingw/CMakeDownloadLog.txt,该文件包含了下载错误的提示信息。
#use_cache "C:/software/opencv3/opencv/sources/.cache"
#do_copy "opencv_ffmpeg.dll" "55c25bbc13e4a12d4339b70d3b76987f" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/opencv_ffmpeg.dll" "C:/software/opencv3/opencv/build/x64/mingw/3rdparty/ffmpeg"
#missing "C:/software/opencv3/opencv/build/x64/mingw/3rdparty/ffmpeg/opencv_ffmpeg.dll"
#cmake_download "C:/software/opencv3/opencv/sources/.cache/ffmpeg/55c25bbc13e4a12d4339b70d3b76987f-opencv_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/opencv_ffmpeg.dll"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Could not resolve host: raw.githubusercontent.com
# Closing connection 0
# 

#do_copy "opencv_ffmpeg_64.dll" "67caee9231c6843483b4de9815d6526e" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/opencv_ffmpeg_64.dll" "C:/software/opencv3/opencv/build/x64/mingw/3rdparty/ffmpeg"
#missing "C:/software/opencv3/opencv/build/x64/mingw/3rdparty/ffmpeg/opencv_ffmpeg_64.dll"
#cmake_download "C:/software/opencv3/opencv/sources/.cache/ffmpeg/67caee9231c6843483b4de9815d6526e-opencv_ffmpeg_64.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/opencv_ffmpeg_64.dll"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Could not resolve host: raw.githubusercontent.com
# Closing connection 0
# 

#do_copy "ffmpeg_version.cmake" "3b90f67f4b429e77d3da36698cef700c" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/ffmpeg_version.cmake" "C:/software/opencv3/opencv/build/x64/mingw/3rdparty/ffmpeg"
#missing "C:/software/opencv3/opencv/build/x64/mingw/3rdparty/ffmpeg/ffmpeg_version.cmake"
#cmake_download "C:/software/opencv3/opencv/sources/.cache/ffmpeg/3b90f67f4b429e77d3da36698cef700c-ffmpeg_version.cmake" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/ffmpeg_version.cmake"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Could not resolve host: raw.githubusercontent.com
# Closing connection 0
# 


该文件内容很长,但是不要慌,最终的目的是手动下载三个没能下载成功的文件,将它们放到.cache文件夹中。

  1. 按照CMakeDownloadLog.txt该文件夹中的内容,我们打开C:/software/opencv3/opencv/sources/.cache文件夹,下面有ffmpeg文件夹,继续打开,发现里面放着三个下载失败的0KB文件。
    下载失败
  2. 按照CMakeDownloadLog.txt文件中的提示,我们要下载三个对应的文件,分别复制到该文件夹下,并且要求修改文件名和.cache/ffmpeg文件夹下的名称相同。
    .dll文件的下载链接,就是CMakeDownloadLog.txt文件中的对应链接。
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/opencv_ffmpeg.dll" 

"https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/opencv_ffmpeg_64.dll"

"https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/ffmpeg_version.cmake" 

修改后的前缀名要保证是与自己的Log文件夹中对应的字符串,这串字符是.md5加密串,后续编译过程,编译器会检查该串与文件的.md5是否相同。

 "55c25bbc13e4a12d4339b70d3b76987f" 

"67caee9231c6843483b4de9815d6526e" 

"3b90f67f4b429e77d3da36698cef700c" 

特别注意的是,.cmake文件从浏览器打开之后,是一个类似文本文档被浏览器打开的内容。
.cmake文件
但是,不要将该段文字复制、粘贴到.cache文件夹下的.cmake文件中,因为该下载失败的文件的md5与目标md5是不同的,后续检查会报错。正确做法是Ctrl+S,保存该页面,文件名存为3b90f67f4b429e77d3da36698cef700c-ffmpeg_version.cmake。
在这里插入图片描述
6. 将上述三个文件,放到.cache文件夹中,如下。
ffmpeg文件

至此,就把ffmpeg的隐患解决了。

第二次点击Configure。

configure done
再点击Generate,最后Generate Done,就完成了。

  Video I/O:
    DC1394:                      NO
    FFMPEG:                      YES (prebuilt binaries)
      avcodec:                   YES (ver 57.107.100)
      avformat:                  YES (ver 57.83.100)
      avutil:                    YES (ver 55.78.100)
      swscale:                   YES (ver 4.8.100)
      avresample:                YES (ver 3.7.0)
    GStreamer:                   NO
    DirectShow:                  YES

make

cmd进入刚刚设置的文件夹C:\software\opencv3\opencv\build\x64\mingw,执行命令: minGW32-make -j 4。
mingw32-make -j 4
make成功
编译完成
继续执行minGW32-make install
执行成功
配置OpenCV的环境变量。
opencv环境变量

配置Vscode环境,支持OpenCV3

任意创建一个文件夹,放置自己的代码。
最后的文件结构如下:
文件结构
自己创建.vscode文件夹,自己创建c_cpp_properties.json、launch.json、tasks.json文件。自己创建Debugger文件夹。

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "win",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/software/opencv3/opencv/build/x64/mingw/include",
                "C:/software/opencv3/opencv/build/x64/mingw/install/include/opencv2",
                "C:/software/opencv3/opencv/build/x64/mingw/install/include"
            ],
            "defines": [],
            "compilerPath": "C:/software/mingw64/bin/g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "${default}"
        }
    ],
    "version": 4
}

launch.json

{

    "version": "0.2.0",
    "configurations": [
        {
            "name": "opencv debuge",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}//Debugger//${fileBasenameNoExtension}.exe",
            //上面这个Debugger是我自己定义的,为了方便放置生成的exe文件
            "args": [],
            "stopAtEntry": false, //这里如果为 false,则说明调试直接运行。(反之则停止)
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,//是否调用外部cmd
            "MIMode": "gdb",
            "miDebuggerPath": "C:/software/mingw64/bin/gdb.exe",//自己进行设置
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "opencv3.5.2"
        }
    ]
}

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "opencv3.5.2",
            "command": "C:/software/mingw64/bin/g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${workspaceFolder}//Debugger//${fileBasenameNoExtension}.exe",
                //上面这个Debugger是我自己定义的,为了方便放置生成的exe文件
                "C:/software/opencv3/opencv/build/x64/mingw/bin/libopencv_world3416.dll",
                "-I",
                "C:/software/opencv3/opencv/build/x64/mingw/install/include",
                "-I",
                "C:/software/opencv3/opencv/build/x64/mingw/install/include/opencv2",
            ],
            "options": {
                "cwd": "C:/software/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

在C:\software\opencv3\opencv\build\x64\mingw\bin下找到libopencv_world3416.dll,和opencv_ffmpeg3416_64.dll复制到Debugger文件夹下。注意这个后缀3416是OpenCV的版本号,与自己安装的版本有关系。

生成test.cpp文件,输入测试代码。

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
int main()
{
    Mat img=imread("man.jpg");
    imshow("image",img);
    waitKey();
    return 0;
}

能正常运行,就表示图片可以正常运行了。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;

int main(int argc, char** argv){
    cv::namedWindow("Example3", cv::WINDOW_AUTOSIZE);
    cv::VideoCapture cap;
    cap.open("test.mp4");
    cout<<cap.isOpened()<<endl;
    cv::Mat img; 
    cap >> img;
    std::cout << "image read: " << (img.empty()==true) << std::endl;
    cv::Mat frame;
    for(;;){
        cap >> frame;
        if(frame.empty()) break; // Ran out of film
        cv::imshow("Example3", frame);
        if(cv::waitKey(10) >= 0) break;
    }
    return 0;
}

视频可以正常读取,就表示视频也OK了!
wow!至此,一切成功!

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 在VSCode中使用opencv_contrib主要需要进行以下步骤: 1. 安装VSCode:首先需要下载并安装VSCode,可以从官方网站下载对应操作系统的安装包,然后按照安装向导进行安装。 2. 安装Python扩展:在VSCode中安装Python扩展,可以通过在扩展面板中搜索Python并点击安装来安装。 3. 创建Python项目:在VSCode中创建一个新的Python项目,可以使用菜单栏的File → New File或者使用快捷键Ctrl+N。 4. 安装opencv_contrib:在项目文件夹下,打开终端并使用pip命令安装opencv_contrib库。可以使用以下命令安装: ``` pip install opencv-contrib-python ``` 5. 导入库和使用:在Python代码中导入opencv_contrib库并使用其中的函数。例如,可以使用以下代码导入并使用cv2模块中的函数: ```python import cv2 ``` 现在你可以使用opencv_contrib库中的函数进行图像处理、计算机视觉等操作了。 6. 运行代码:在VSCode中按下F5键或者使用菜单栏的Run → Start Debugging来运行代码。 以上是在VSCode中使用opencv_contrib的基本步骤。请注意,在安装opencv_contrib之前,需要确保已经安装了Python以及相应的开发环境。 ### 回答2: VSCode是一款强大的源代码编辑器,而OpenCV_contrib是OpenCV的一个附加模块,提供了许多额外的功能和算法。在VSCode中使用OpenCV_contrib可以参考以下步骤: 1. 首先,确保已经正确安装了VSCodeOpenCV_contrib。可以从官方网站上下载并安装VSCode,然后使用pip或者conda安装OpenCVOpenCV_contrib。 2. 在VSCode中创建一个新的Python项目文件夹。可以选择"打开文件夹"或者使用命令行来创建。 3. 打开VSCode的终端。可以使用快捷键Ctrl+`来打开终端,或者选择"查看"->"终端"。确保终端的工作目录是你的项目文件夹。 4. 运行以下命令来导入OpenCVOpenCV_contrib: ``` import cv2 import cv2.aruco as aruco ``` 5. 现在你可以使用OpenCV_contrib中的功能和算法了。例如,可以使用aruco模块来检测和识别ArUco码: ``` # 加载ArUco字典 aruco_dict = aruco.Dictionary_get(aruco.DICT_ARUCO_ORIGINAL) # 使用CameraMatrix和DistCoeffs进行标 camera_matrix = np.array([[focal_length_x, 0, center_x], [0, focal_length_y, center_y], [0, 0, 1]]) dist_coeffs = np.array([k1, k2, p1, p2, k3]) # 读取图像 image = cv2.imread('image.jpg') # 检测ArUco码 corners, ids, rejectedImgPoints = aruco.detectMarkers(image, aruco_dict) # 显示结果 aruco.drawDetectedMarkers(image, corners, ids) cv2.imshow('ArUco', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 6. 编写完代码后,可以使用VSCode提供的调试功能来调试代码。选择"调试"->"启动调试",然后点击"运行"按钮开始调试。 以上就是在VSCode中使用OpenCV_contrib的一些基本步骤。希望能对你有所帮助! ### 回答3: 在VS Code中使用opencv_contrib,首先需要确保已经正确安装并配置了OpenCV和OpenGL。接下来可以按照以下步骤操作: 1. 打开VS Code,创建一个新的C++项目或者打开一个已存在的项目。 2. 在项目的根目录中创建一个新的文件夹,例如"opencv_contrib"。 3. 将OpenCV_contrib模块的源代码下载或者复制到这个新的文件夹中。 4. 在VS Code中打开终端或者集成终端,进入到项目的根目录。 5. 使用CMakeLists.txt文件来配置项目。在配置文件中,添加以下内容: ``` cmake_minimum_required(VERSION 3.10) project(YourProjectName) set(CMAKE_CXX_STANDARD 11) # 导入OpenCV和OpenGL库 find_package(OpenCV REQUIRED) find_package(OpenGL REQUIRED) # 包含OpenCV和OpenGL头文件 include_directories(${OpenCV_INCLUDE_DIRS}) include_directories(${OPENGL_INCLUDE_DIRS}) # 添加OpenCV_contrib模块 add_subdirectory(opencv_contrib) # 将OpenCV_contrib模块链接到项目中 target_link_libraries(YourProjectName ${OpenCV_LIBS}) target_link_libraries(YourProjectName opencv_contrib) ``` 6. 保存配置文件并再次打开终端,并输入以下命令进行构建: ``` cmake . make ``` 7. 构建完成后,你就可以在VS Code中编写代码并使用OpenCV_contrib模块了。 需要注意的是,以上步骤假设你已经正确安装了OpenCV和OpenGL,并且你的系统已经正确配置了相关的环境变量。如果你在使用过程中遇到问题,可以参考OpenCV_contrib的官方文档或者在开发者社区中寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProfSnail

谢谢老哥嗷

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值