VS2010+OpenCV3.4.1+zbar 64位
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就可以用摄像头扫描二维码了。