1. OpenCV3.4.1和zbar文件夹放到指定的路径下,我把它们放在了”D:\二维码\环境“中。
zbar:链接:https://pan.baidu.com/s/11eCDVHVA_R7ktQaX_l6gww 密码:ubzj
OpenCV3.4.1:链接:https://pan.baidu.com/s/1OVbLeG6qJ9aNqdF4UnFFLg 密码:460q
2. 环境变量配置:
右键“此电脑”——属性——高级系统设置——环境变量。
在系统变量中找到“Path”,编辑。
新建两个环境变量
D:\二维码\环境\opencv3.4.1\build\x64\vc14\bin
D:\二维码\环境\ZBar\bin
3. 在VS2010中新建项目。选择C++——Win32——Win32控制台应用程序,在附加选项中选择空项目。
4. 生成的项目中,在解决方案资源管理器中,右键解决方案——属性。配置属性——配置,配置选活动(Debug),平台选活动(x64)。
5. 视图——其他窗口——属性管理器。
6. 配置属性:
双击项目名——配置属性——VC++目录,在包含目录中加入:
D:\二维码\环境\ZBar\include
D:\二维码\环境\opencv3.4.1\build\include\opencv2
D:\二维码\环境\opencv3.4.1\build\include\opencv
D:\二维码\环境\opencv3.4.1\build\include
在库目录中加入:
D:\二维码\环境\ZBar\lib
D:\二维码\环境\opencv3.4.1\build\x64\vc14\lib
链接器——输入,在附加依赖项中加入:
opencv_world341d.lib
libzbar-0.lib
libzbar64-0.lib
测试代码如下,直接选择二维码图片识别,二维码是一个QRCODE,如果一幅图片上有多个二维码,也可以识别出来。该程序在网盘中,图片识别二维码。
图片识别二维码工程:链接:https://pan.baidu.com/s/1Bd-JJDarvc2yvXYQuwKPeA 密码:dyzz
#include "opencv2/opencv.hpp"
#include "zbar.h"
#include "cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
using namespace zbar;
using namespace cv;
int main(int argc, char** argv)
{
zbar::ImageScanner scanner;
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
string fileName="E:\\QR_CODE.bmp";
Mat image = imread(fileName);
double start=clock();
if (!image.data)
{
cout << "请确认图片" << endl;
system("pause");
return 0;
}
Mat imageGray;
cvtColor(image, imageGray, CV_RGB2GRAY);
int width = imageGray.cols;
int height = imageGray.rows;
uchar *raw = (uchar *)imageGray.data;
Image imageZbar(width, height, "Y800", raw, width * height);
scanner.scan(imageZbar); //扫描条码
Image::SymbolIterator symbol = imageZbar.symbol_begin();
if (imageZbar.symbol_begin() == imageZbar.symbol_end())
{
cout << "查询条码失败,请检查图片!" << endl;
}
for (; symbol != imageZbar.symbol_end(); ++symbol)
{
cout << "类型:" << endl << symbol->get_type_name() << endl << endl;
cout << "条码:" << endl << symbol->get_data() << endl << endl;
string s=symbol->get_data();
}
double end=clock();
double ts=end-start;
cout<<ts<<endl;
imshow("Source Image", image);
waitKey();
imageZbar.set_data(NULL, 0);
system("pause");
return 0;
}
调用摄像头代码:
摄像头识别二维码工程:链接:https://pan.baidu.com/s/1nyl6Hj6nI9fy4rNt3I-PDA 密码:6rur
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0);//0-前置摄像头,1-后置
Mat frame;
while (1)
{
cap >> frame;
imshow("调用摄像头", frame);
waitKey(1);
}
return 0;
}
用frame代替上例中的image就可以用摄像头扫描二维码了。