首先,需要安装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

  3. 配置环境变量。

    3.1 右键桌面此电脑,选择属性。

    3.2 选择高级系统设置。

    3.3 打开环境变量。

    3.4 设置path,添加一条路径,为刚刚mingw的下bin文件夹的路径。C:\software\mingw64\bin。

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

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

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

下载opencv3

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

下载Cmake

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


将其解压到自定义目录下,我的路径为:C:\software\cmake\bin

点开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。

Compiler,选择Mingw文件夹bin下的gcc.exe和g++.exe。路径是C:\software\mingw64\bin。

显示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:                      NOFFMPEG:                      NOavcodec:                   NOavformat:                  NOavutil:                    NOswscale:                   NOavresample:                NOGStreamer:                   NODirectShow:                  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.txtCall 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.txtCall 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.txtCall 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文件从浏览器打开之后,是一个类似文本文档被浏览器打开的内容。

但是,不要将该段文字复制、粘贴到.cache文件夹下的.cmake文件中,因为该下载失败的文件的md5与目标md5是不同的,后续检查会报错。正确做法是Ctrl+S,保存该页面,文件名存为3b90f67f4b429e77d3da36698cef700c-ffmpeg_version.cmake。

6. 将上述三个文件,放到.cache文件夹中,如下。

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

第二次点击Configure。


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

  Video I/O:DC1394:                      NOFFMPEG:                      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:                   NODirectShow:                  YES

make

cmd进入刚刚设置的文件夹C:\software\opencv3\opencv\build\x64\mingw,执行命令: minGW32-make -j 4。

make成功

继续执行minGW32-make install

配置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 filmcv::imshow("Example3", frame);if(cv::waitKey(10) >= 0) break;}return 0;
}

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

一次搞定!如何用VSCode编写OpenCV相关推荐

  1. endnote转化成纯文本后_如何用Endnote分分钟搞定参考文献

    原标题:如何用Endnote分分钟搞定参考文献 解螺旋公众号·陪伴你科研的第1924天 Endnote教程第二弹来啦! 写论文离不了对参考文献的引用,Endnote在文献撰写中发挥着重要作用.下面我们 ...

  2. 如何用20%精力搞定80%任务

    19世纪末20世纪初意大利经济学家巴莱多发现的.他认为,在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的,因此又称二八定律."二八时间法则"具 ...

  3. 三步搞定 vscode 代码格式化

    一.安装以下几个 vscode 扩展程序: ESLint Prettier - Code formatter Vetur 如图: 二.打开 settings 文件 打开方式: 先按步骤打开 setti ...

  4. 在Android Studio编写代码时,使用MaterialCardView的项目无法正常运行怎么办?简简单单搞定它_莫韵乐与bug的奇妙冒险

    在Android Studio编写代码时,使用MaterialCardView布局的项目闪退怎么办?简简单单搞定它 当我想用MaterialCardView去做一个好看的界面的时候,应用居然闪退了 经 ...

  5. python数学公式编辑工具_1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器...

    原标题:1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器 来源:量子位 关注前沿科技 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 萧箫 发自 凹非寺 ...

  6. VSCode配置 Debugger for Chrome插件(终于搞定了..)

    今天重装了vsCode,重新安装了插件,配置这个调试插件时花了一个小时-好菜,因为我按网上教程配置了出现断点灰色,调试不了的问题,所以我找解决方法-现在半夜两点了,我要秃了-才刚入行哈哈哈哈哈哈 进入 ...

  7. 1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 写论文时,手敲成堆的计算公式,被虐到头秃? 做讲课PPT时,几十页的计算推理公式,恨不得直接手写拍照? 现在,解放双手的时刻来了,只需要掌握 ...

  8. 如何用最短时间搞定酷炫可视化大屏?这款工具值得一看

    要问当前什么BI工具最热门,肯定非PowerBI莫属,堪比BI界的Python.对于我这种用惯了Tableau来说,确实会眼红PowerBI某些特性. 但PowerBI和Tableau都有一个问题:使 ...

  9. 如何用一套引擎搞定机器学习全流程?

    作者:陈戊超(仲卓) 深度学习技术在当代社会发挥的作用越来越大.目前深度学习被广泛应用于个性化推荐.商品搜索.人脸识别.机器翻译.自动驾驶等多个领域,此外还在向社会各个领域迅速渗透. 背景 当前,深度 ...

最新文章

  1. ora-12528 : message 12528 not found; product=RDBMS ; facility=ora
  2. 二手宏碁上网本装linux,Acer国内20日首发“上网本” 放弃Linux使用XP
  3. ubuntu同时装有MXNet和Caffe框架
  4. [网络流24题-9]试题库问题
  5. for myself
  6. Lc165-版本号比较
  7. 嵌入式学习之QT学习----3 制作简单的QT界面(如:QQ登录界面)
  8. GAT GAX 简介
  9. Effective C++ item 6
  10. BUUCTF misc 专题(92)[XMAN2018排位赛]通行证
  11. 如何使用测试仪进行400G交换机性能测试
  12. 青港风雨之罗雨琦(二)厄运还将继续
  13. 必得沾福气卡两张,可沾花花卡、敬业福。(扫福攻略、扫福技巧)
  14. java ebcdic编码转换_JAVA实现ASCII码与EBCDIC码的相互转换
  15. Android漏洞查询
  16. consul-agent
  17. 计算机网络中的各种攻击
  18. android垂直滚动显示,Android 上下滚动字幕实现
  19. 基于51单片机的俄罗斯方块小游戏proteus仿真LCD12864原理图程序设计
  20. 医院虚拟化系统安全防护解决方案

热门文章

  1. 如何让计算机系统恢复默认字体,大神教你处理win7系统更改默认字体的恢复方法...
  2. 计算机系统中几个周期的区别…
  3. 怎么抓取网上的音频呢?我来操作下嘿嘿...
  4. H264码流中SPS、PPS详解
  5. 毕业设计 - 题目:基于大数据的信用卡欺诈检测
  6. 雅虎再曝黑客入侵事件 10亿用户数据遭窃!
  7. 软件工程师 算法工程师_采访100多位软件工程师后的建议
  8. 局域网聊天软件 简单实现原理(附:代码)
  9. 信息推送分发服务器系统,消息事件的分发方法、分发平台、系统及服务器专利_专利查询 - 天眼查...
  10. phpems 修改模板_PHPEMS6.0bug及修复方法