环境配置:Win10 - VSCode - MinGW64 - OpenCV 4.5.0 - ZBar 0.23.92

易流觞
2023-12-01

前言

在开始环境配置前,请充分理解以下内容,减少配置中走回头路的概率。

  • 配置环境是整个开发过程中最容易踩坑,体验最差的一个阶段,但是一旦走过这个阶段,后面就是一片坦途。所以请放平心态,耐下心来,一步一个脚印走完。
  • 由于Windows和Linux系统的底层架构不同,Linux上编译的文件在Windows上不能使用,需要重新编译。
  • MinGW和Visual Studio的配置方式是两条不同的路线,由于底层使用的GNU编译套件不同,两种方式所编译出的库不能通用。
  • 在配置时,首先应配置好MinGW,然后再在其基础上生成OpenCV和Zbar的库文件。最后可以在VSCode上进行验证,但VSCode不是唯一选择。
  • 每完成一个任务,配置环境变量后,都建议重启一次电脑。
  • 测试每一项安装是否成功,通过VSCode编译、连接后,要将所需的dll放在可执行程序exe的目录下。

1. VSCode

下载VSCode

https://code.visualstudio.com/

安装 C/C++ 插件

在VSCode中搜索C/C++,安装即可(C++ Intellisense 可选)。

项目配置

通过新建并配置三个json文件,就可以通过VSCode调试程序了。

  • launch.json
{    
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\env\\mingw64\\bin\\gdb.exe",		//自行修改
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 生成活动文件"
        }
    ]
}

  • c_cpp_properties.json(这里预先配置了OpenCV和ZBar,环境配置完后用来测试)
{
    "configurations": [
        {
            "name": "win",
            "includePath": [
                "${workspaceFolder}/**",
                "C:\\env\\opencv-4.5.0\\build\\install\\include", 
                "C:\\env\\opencv-4.5.0\\build\\install\\include\\opencv2",
                "C:\\env\\zbar-0.23.92\\include"
            ],
            "defines": [],
            "compilerPath": "C:\\env\\mingw64\\bin\\gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

  • tasks.json(路径内容自行修改)
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "C:\\env\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${fileDirname}\\*.cpp",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",

                "-I", "C:\\env\\opencv-4.5.0\\build\\install\\include",
                "-I", "C:\\env\\opencv-4.5.0\\build\\install\\include\\opencv2",            
                "-L", "C:\\env\\opencv-4.5.0\\build\\install\\x64\\mingw\\lib",
                "-l", "opencv_core450",
                "-l", "opencv_imgproc450",
                "-l", "opencv_imgcodecs450",
                "-l", "opencv_video450",
                "-l", "opencv_ml450",
                "-l", "opencv_highgui450",
                "-l", "opencv_objdetect450",
                "-l", "opencv_flann450",
                "-l", "opencv_imgcodecs450",
                "-l", "opencv_photo450",
                "-l", "opencv_videoio450",

                "-I", "C:\\env\\zbar-0.23.92\\include",
                "-I", "C:\\env\\zbar-0.23.92\\include\\zbar",
                "-L", "C:\\env\\zbar-0.23.92\\zbar\\.libs",
                "-l", "zbar"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

2. MinGW

选择MinGW的原因

很显然,MinGW比起动辄几十个G的Visual Studio轻便太多了。

MinGW下载

通过这个链接下载获取MinGW的安装包文件。
http://sourceforge.net/projects/mingw/files/latest/download

开始安装

安装MinGW

在Settings页面,依次选择

  • Version: 8.1.0
  • Architecture: x86_64
  • Threads: posix
  • Exception: seh
  • Build revision: 0

这里需要注意的是线程Threads的选择,如果要使用std::threads,另一个选项win32是不支持的,则选择安装posix。

配置环境变量

安装后,在系统环境变量中添加安装好的MinGW的bin文件位置,如:
C:\env\mingw64\bin

安装后测试

打开命令行,这里建议先安装一个Git,然后使用git bash打开。直接使用cmd打开也可以。

gcc -V

如果出现相关信息,则说明安装成功,我的部分显示结果如下:

Thread model: posix
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

代码测试

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;

    system("pause");
    return 0;
}

3. OpenCV

这里通过源码的方式编译出我们能够使用的OpenCV库,首先需要安装cmake。

安装CMake

下载地址:https://cmake.org/download/
选择适配的版本,下载后开始安装。安装也很简单,一路按照默认配置安装就行。安装后,也将其添加到系统环境变量中,如:
C:\env\CMake\bin

OpenCV下载

使用CMake编译OpenCV

运行cmake-gui,源码位置选择OpenCV的下载位置,编译位置选择在OpenCV同路径下新建的build文件夹。
点击Configure,生成器选择MinGW Makefiles,“Use default native compilers”,点击Finish。

等待片刻,当显示Configuring done就表明源码配置完成。
选择OPENCV_EXTRA_MODULES_PATH一项,添加你刚刚解压的opencv_contrib中的modules目录,还要把OPENCV_ENABLE_NONFREE选上。
然后再点击Configure,完成后点击Generate,之后会提示generating done,说明cmake编译成功了。

然后进入刚才编译路径下(/build),开始安装。
输入mingw32-make install
等待一段时间后,OpenCV就安装好了。

如果install opencv时出现vs_version.rc.obj无法生成的错误,可以返回前面cmake的步骤,添加一行OPENCV_VS_VERSIONINFO_SKIP = 1的选项,重新编译即可通过。

配置环境变量

完成后,配置环境变量,如:
C:\env\opencv-4.5.0\build\install\bin

安装后测试

这里通过一段测试程序来检测环境配置。代码如下:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>

using namespace cv;
using namespace std;

int main()
{
    Mat img=imread("img.png");
    cv::imshow("image",img);
    imwrite("./img.png", img);
    cv::waitKey();
    return 0;
}

图片路径自行修改。

4. ZBar

与目前能找到大多数使用0.10版本的教程不同,我使用的是0.23版本。0.10版本后,ZBar原作者就将其交予其他开发者进行开发和维护,现在的新版ZBar要更加优秀,且更易于配置,已经没有继续使用0.10的理由。

下载ZBar

选择最新版本下载:https://github.com/mchehab/zbar

编译ZBar

编译借鉴了Github上的一个issue,https://github.com/mchehab/zbar/issues/144
首先要安装MSYS2,下载链接是:https://www.msys2.org/

接着进入MSYS2 MinGW 64-bit,执行以下命令

pacman -S mingw-w64-x86_64-toolchain
cd zbar
autoreconf -vfi
./configure  --host=x86_64-w64-mingw32 --without-java --without-gtk --without-qt  --without-imagemagick  --disable-video --without-python
make
make install

完成后,不需要配置环境变量,只要编译出的动态链接库即可。

安装后测试

#include <iostream>
#include <zbar.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>

#define STR(s) #s

using namespace std;
using namespace cv;
using namespace zbar;

int main()
{
    // create a reader
    ImageScanner scanner;

    // configure the reader
    scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);

    // obtain image data
    Mat img = imread("barcode.png");
    Mat imageGray;
    cvtColor(img, imageGray, COLOR_RGB2GRAY);
    int width = imageGray.cols;
    int height = imageGray.rows;
    uchar *raw = (uchar *)imageGray.data;

    // wrap image data
    Image image(width, height, "Y800", raw, width * height);

    // scan the image for barcodes
    int n = scanner.scan(image);

    // extract results
    for(Image::SymbolIterator symbol = image.symbol_begin();
        symbol != image.symbol_end();
        ++symbol) {
        // do something useful with results
        cout << "decoded " << symbol->get_type_name()
             << " symbol \"" << symbol->get_data() << '"' << endl;
    }

    // clean up
    image.set_data(NULL, 0);

    system("pause");
    return 0;
}

图片路径自行修改。

附注

由于各人设备环境差异,配置中可能遇到各种各样的坑。踩坑后建议去国外技术论坛找寻答案。

 类似资料: