如何正确地用MinGW64编译与配置vscode的Opencv环境

1.前情提要

最近有关于图形学的授课,教授开始布置的上机打码的代码实现作业了。虽说教授为了让我们省心,直接就整了个环境已经配置好的几个G的虚拟机给我们用。但是你也懂的,虚拟机打码,卡得要命。一开始还以为会用到什么高级的库,看了下就是个Eigen3和Opencv,对于Opencv,感觉自己手动在本地配一个就OK了。在配置的过程中才发现这玩意坑是尼玛的多,而且还是不带附加件的情况下,因此本篇博客应然而生。

2.准备工作

  1. 从https://github.com/opencv/opencv/releases下载合适版本的Opencv源码,笔者当时演示的是编译4.5.1版本的Opencv

  1. 下载安装、并正确配置MingW64(必须是64位,32位不支持Posix-thread,编译过程会报错),如果配置正确,在命令行输入命令应该会有正确的响应。

  1. 下载安装并正确配置cmake-gui

当然如果你足够geek的话,也可以直接用命令行,反正我是受不了

3.搭建,生成编译项目

首先把源码解压到一个文件夹中,并新建一个文件夹作为项目的输出

打开cmake-gui,填好源码以及输出的路径

点击Configure,就会弹出要你选择指定的编译环境的对话框了。我们妥妥地选择MinGW,并且指定Native编译器

把你MinGW64的gcc和g++的路径填进去(Fortran空着就行,这个项目用不上)

然后就开始配置了...

过了一会你回来发现,坑爹呢这是

配置显示你没有这两个第三方库,开始下载,并且由于中美两岸的缘故,半天都下不动。这个时候你就要明智地选择Stop了(网速好或者肉身FQ者另说)。

打开build/CMakeDownloadLog.txt,并找到

找到这两个库的地址,用尽你一切魔法上网手段去下载他们,这里是Opencv4.5.1两个库的地址分别是:

https://raw.githubusercontent.com/opencv/opencv_3rdparty/6152e132572dfdaa32887eabeb7199bef49b14dc/ffmpeg/opencv_videoio_ffmpeg.dll

https://raw.githubusercontent.com/opencv/opencv_3rdparty/6152e132572dfdaa32887eabeb7199bef49b14dc/ffmpeg/opencv_videoio_ffmpeg_64.dll

下好之后就可以放到build\3rdparty\ffmpeg

顺利配置完毕

(可选)找到BUILD_opencv_world并勾选,这样做可以把opencv各种散装的库集中在一个库libopencv_world中,当然如果你只需要其中的几个库也可以不勾选,或者只勾选需要的库。

然后点击生成(Generate)

很快就生成完毕了,这时候就可以退出cmake了

4.编译Opencv

在build目录下打开命令行,并输入mingw32-make -j4

其中-j4是指四核异步进行编译,按下回车就正式开始编译了

目前我们就完成二分之一的工作了,接下来就剩下编译和配置了,注意编译时间比较长,可以喝杯茶适当休息一下

另外编译中途可能会报出各种奇奇怪怪的构造错误,并终止编译。你可以重复尝试更换不同数量的多核异步编译,基本都能解决。但如果出现编译错误就需要谷歌一下了,因为中途报出来的错误种类非常多非常杂。总之最终编译进度达到[100%]就是胜利了。

你可以再运行一次检查有没有疏漏

可以看到编译好的库都在\build\bin中了

如果你没有勾选libopencv_world的话,则是生成各种散装的库

5.配置运行环境

打开环境变量,找到PATH

将库的路径添加进去

6.配置vscode编译项目环境

首先在build\目录下输入mingw32-make install以生成用以导入的头文件

build/install/include/下你就可以看到这些头文件了

新建一个文件夹作为项目目录

在vscode中打开,并如图新建三个项目设置文件

按照下面进行配置,注意其中mingw64以及opencv改成你的目录路径

  • c_cpp_properties.json
{
"configurations": [
{
"name": "Win64",
"includePath": [
"${workspaceFolder}\\**",
"C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\include",
"C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\8.1.0\\include",
"E:\\Library\\opencv\\build\\install\\include"
],
"defines": [
"UNICODE",
"_UNICODE"
],
"intelliSenseMode": "msvc-x64",
"cStandard": "c11",
"cppStandard": "c++11"
}
],
"version": 4
}
  • launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}\\bin\\Assignment.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}\\bin",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",
"preLaunchTask":"g++",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
]
}
]
}
  • tasks.json
{
"version": "2.0.0",
"command": "g++",
"args": ["-g", "${file}",
"-o", "bin/Assignment.exe",
"-std=c++11",
"E:\\Library\\opencv\\build\\bin\\libopencv_world451.dll",
"-I",
"E:\\Library\\opencv\\build\\install\\include"] }

如果你在编译时没有勾选BUILD_opencv_world,就要如下配置了......

{
"version": "2.0.0",
"command": "g++",
"args": ["-g", "${file}",
"-o", "bin/Assignment.exe",
"-std=c++11",
"E:\\Library\\opencv\\build\\bin\\libopencv_aruco451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_bioinspired451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_calib3d451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_ccalib451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_core451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_datasets451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_dnn451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_dnn_objdetect451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_dnn_superres451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_dpm451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_face451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_features2d451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_flann451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_fuzzy451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_gapi451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_hfs451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_highgui451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_imgcodecs451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_imgproc451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_img_hash451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_intensity_transform451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_line_descriptor451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_mcc451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_ml451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_objdetect451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_phase_unwrapping451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_photo451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_plot451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_quality451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_rapid451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_reg451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_rgbd451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_saliency451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_shape451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_stitching451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_structured_light451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_surface_matching451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_text451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_video451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_videoio451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_xobjdetect451.dll",
"E:\\Library\\opencv\\build\\bin\\libopencv_xphoto451.dll",
"-I",
"E:\\Library\\opencv\\build\\install\\include"] }

或者写个程序自动生成......

写个例程试试看......

成功编译运行。

(图片pid:74015542)

附录

A.用到的代码

  • 例程main.cpp代码
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
int main()
{
cv::Mat src = cv::imread("uzuki.png", -1), dst; resize(src, dst, cv::Size(int(src.cols / 4), int(src.rows / 4))); cv::imshow("Uzuki", dst); cv::waitKey(); return 0;
}
  • 文件自动生成
import os  

def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
for filess in files :
if("libopencv" in filess) : print("\"E:\\\\Library\\\\opencv\\\\build\\\\bin\\\\" + filess + "\",") file_name("E:\\Library\\opencv\\build\\bin\\")

Opencv | 图形学 | Mingw64 | 如何正确地用MinGW64编译与配置vscode的Opencv环境的更多相关文章

  1. VScode搭建OpenCV环境

    用vscode来写opencv代码需要自己编译OpenCV,主要用到MinGW-w64和CMake工具.由于可能存在的版本兼容问题,下载这些工具前最好先访问网站: https://github.com ...

  2. 开发环境配置--Ubuntu+Qt4+OpenCV(一)

    同系列的文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV( ...

  3. Ubuntu16.04安装配置Eclipse 以及opencv的使用

    安装配置http://www.oracle.com下载与自己电脑系统对应的JDK.我下载的是jdk-8u101-linux64.tar.gz 解压:sudo tar -zxvf jdk-8u101-l ...

  4. 开发环境配置--Ubuntu+Qt4+OpenCV(三)

    同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...

  5. 开发环境配置--Ubuntu+Qt4+OpenCV(二)

    同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...

  6. Android Studio中配置及使用OpenCV示例

    Android Studio配置及使用OpenCV 前言:最近在做项目移植,项目较大,在Eclipse中配置的Jni及OpenCV环境没任何问题,但是迁移到Studio中就问题一大堆,网上也找了一些资 ...

  7. linux安装及配置c++的opencv库

    linux安装及配置c++的opencv库 前言: 最近想搞个机器视觉的比赛,要求是linux+opencv环境,没有做过opencv开发的我配置环境就配了两天,看来很多乱七八糟的博客,终于装好了.网 ...

  8. win7下cmake编译opencv2.3.1生成opencv—createsamples.exe和opencv_haartrainingd.exe

    第一步:下载安装cmake,之后进行默认安装即可,这步略过. 第二步:配置cmake ,使cmake找到opencv进行编译安装 watermark/2/text/aHR0cDovL2Jsb2cuY3 ...

  9. CENTOS 配置好SVN服务环境后,其他服务器无法访问 Error: Can't connect to host '192.168.1.103': 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

    CENTOS 配置好SVN服务环境后,其他服务器无法访问   根据 下面的步骤配置好服务后,使用本机可以正常 连接到 SVN 服务, 但是使用局域网的其他服务器访问时出现下面的错误, Error: C ...

  10. Python+opencv打开修图的正确方式get

    先逼逼两句: 图像是 Web 应用中除文字外最普遍的媒体格式. 流行的 Web 静态图片有 JPEG.PNG.ICO.BMP 等.动态图片主要是 GIF 格式.为了节省图片传输流量,大型互联网公司还会 ...

随机推荐

  1. Advanced .NET Remoting: 第 9 章 4.改变编程模型

    Advanced .NET Remoting: 第 9 章 4.改变编程模型 前面的所有连接器在 .NET Remoting 应用程序的服务器端和客户端两方面增强功能.可插拔的连接器架构不仅支持创建连 ...

  2. Debian关闭防火墙命令详解

    防火墙是保护计算机系统安全的关键组件.在一些情况下,需要关闭防火墙,以允许特定的应用程序或服务访问网络.在Debian系统中关闭防火墙的方法多种多样,本文将从多个方面对Debian关闭防火墙命令进行详 ...

  3. Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)

    一.前言 海康大华等厂家自己的客户端软件,基本上都是支持自家的设备,不支持其他家的摄像机和硬盘录像机,并不是因为技术上做不到,这些大厂要实现支持兼容其他的家的(他们家的服务端或者收费的都是支持其他家的 ...

  4. [转]vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/)

    1.vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/) 2.OpenMVS详细安装教程(ubuntu18.04) 3.ubu ...

  5. 如何使用vs将现有的项目或者文件夹(尤其是多层目录的)添加到项目中

    在Visual Studio中将现有的项目或者文件夹(尤其是多层目录的)添加到项目解决方案中,步骤如下: 1.将现有项目或文件夹拷贝到指定目录下: 2.解决方案右上有个显示所有文件的按钮,如下图所示: ...

  6. 【狂神说Java】Java零基础学习笔记-JavaSE总结

    [狂神说Java]Java零基础学习笔记-JavaSE总结 JavaSE总结: -完结-撒花- [[狂神说Java]Java零基础学习视频通俗易懂]https://www.bilibili.com/v ...

  7. JMeter:强大的性能测试工具

    揭秘 JMeter:性能测试的得力助手 宝子们,今天咱来唠唠在软件测试这旮旯里超厉害的 JMeter!这玩意儿就像是个超级侦探,能帮咱摸清楚软件系统在人多手杂的时候到底表现咋样. 一.JMeter 是 ...

  8. 基于wvp-GB28181-pro 与 ZLMediaKit 的国标服务器

    官方教程 wvp-GB28181-pro 与 ZLMediaKit 的联调手册 wvp-GB28181-pro wiki ZLMediaKit 基于C++11的高性能运营级流媒体服务框架 地址:Git ...

  9. DevOps 企业级 CI/CD 实战 —— 整合 GitLab+Jenkins+Harbor+Docker 实现代码全自动化流程管理

    前言 随着 AI 人工智能.云计算.Docker.K8S 等容器技术等的发展,DevOps 得到了广泛的应用和推广,CI / CD ( 持续集成 / 持续部署 )等概念不断深化和完善.CI/CD 是现 ...

  10. PDCA使用指南详解(史上最强)

    PDCA循环,一个老话题了,大家都知道要这么做,但在平时的生活和工作当中,你是否真的都这样做呢? 当你发现你面对的困难重重,寸步难行时,是否反思过是因为自己一开始的方法就不正确? 本文包涵了PDCA循 ...