在开始环境配置前,请充分理解以下内容,减少配置中走回头路的概率。
https://code.visualstudio.com/
在VSCode中搜索C/C++,安装即可(C++ Intellisense 可选)。
通过新建并配置三个json文件,就可以通过VSCode调试程序了。
{
"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 生成活动文件"
}
]
}
{
"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": [
{
"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"
}
很显然,MinGW比起动辄几十个G的Visual Studio轻便太多了。
通过这个链接下载获取MinGW的安装包文件。
http://sourceforge.net/projects/mingw/files/latest/download
在Settings页面,依次选择
这里需要注意的是线程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;
}
这里通过源码的方式编译出我们能够使用的OpenCV库,首先需要安装cmake。
下载地址:https://cmake.org/download/
选择适配的版本,下载后开始安装。安装也很简单,一路按照默认配置安装就行。安装后,也将其添加到系统环境变量中,如:
C:\env\CMake\bin
运行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;
}
图片路径自行修改。
与目前能找到大多数使用0.10版本的教程不同,我使用的是0.23版本。0.10版本后,ZBar原作者就将其交予其他开发者进行开发和维护,现在的新版ZBar要更加优秀,且更易于配置,已经没有继续使用0.10的理由。
选择最新版本下载:https://github.com/mchehab/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;
}
图片路径自行修改。
由于各人设备环境差异,配置中可能遇到各种各样的坑。踩坑后建议去国外技术论坛找寻答案。