2021SC@SDUSC
目录
二、ZBar的安装及配置(VS2019 + Zbar + OpenCV3.4.3)
一、ZBar介绍
ZBar是一个开源软件套件,用于从各种来源(如视频流、图像文件和原始强度传感器)读取条形码。它支持许多流行的符号(条形码类型),包括EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5和二维码。
二、ZBar的安装及配置(VS2019 + Zbar + OpenCV3.4.3)
1.ZBar下载
ZBarhttp://zbar.sourceforge.net/download.htmlhttp://zbar.sourceforge.net/download.html ZBar选择windows下载
下载完成后运行zbar-0.10-setup.exe 进行安装,勾选Development Headers and Libraries
zbar是在win32环境下的,要用x64的,还需要一些库文件,github下载
解压后将 ZBarWin64-master\lib 文件夹下 libzbar64-0.lib 文件复制到ZBar安装路径下的 lib 文件夹
将 ZBarWin64-master\lib 文件夹下 libzbar64-0.dll 文件复制到ZBar安装路径下的 bin 文件夹
将ZBarWin64-master\zbar\libiconv\dll_x64文件夹下 libiconv.dll 复制到ZBar安装路径下的bin 文件夹
2.OpenCV下载
OpenCVhttps://opencv.org/releases/https://opencv.org/releases/OpenCV选择3.4.3windows版本
运行opencv-3.4.3-vc14_vc15.exe 进行安装
3.环境配置
系统变量配置:在系统变量中加入该路径
Visual Studio环境配置:如图打开属性管理器
单击右侧属性管理器,右键debug|x64,添加一个新项目属性表,接下来对这个属性表进行配置。
打开该属性表
第一个 VC++目录--包含目录 添加opencv的include路径和zbar的include路径
按照自己的路径来,下同
E:\zbar\include
E:\opencv\build\include
E:\opencv\build\include\opencv
E:\opencv\build\include\opencv2
第二个 VC++目录--库目录 添加opencv和zbar的lib路径
E:\zbar\lib
E:\opencv\build\x64\vc15\lib
第三个 链接器--输入-附加依赖项 添加opencv和zbar的依赖
opencv_world343d.lib
libzbar-0.lib
libzbar64-0.lib
4.代码测试
新建项目,打开属性管理器,右键Debug|x64 添加现有属性表,将之前创建的属性表添加进去。
测试代码:
#include <opencv2/imgproc.hpp> // Gaussian Blur
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp> // OpenCV window I/O
#include <opencv2/features2d.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <zbar.h>
using namespace cv;
using namespace std;
using namespace zbar;
int main()
{
ImageScanner scanner;
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
//调用系统摄像头
VideoCapture cap(0);
Mat mFrame;
while (1)
{
cap >> mFrame;
Mat image = mFrame;
imshow("camera", mFrame);
Mat imageGray;
cvtColor(image, imageGray, COLOR_BGR2GRAY);
int width = imageGray.cols;
int height = imageGray.rows;
uchar* raw = (uchar*)imageGray.data;
// 在Zbar中进行扫描时候,
//需要将OpenCV中的Mat类型转换为(uchar *)类型,raw中存放的是图像的地址;
//对应的图像需要转成Zbar中对应的图像zbar::Image
Image imageZbar(width, height, "Y800", raw, width * height);
//Y800=GREY 是GRAY灰度图像
scanner.scan(imageZbar);
Image::SymbolIterator symbol = imageZbar.symbol_begin();
for (; symbol != imageZbar.symbol_end(); ++symbol)
{
cout << "类型:" << endl << symbol->get_type_name() << endl << endl;
cout << "条码:" << endl << symbol->get_data() << endl << endl;
}
waitKey(5);
//waitKey()函数的功能是不断刷新图像,频率为delay,单位是ms
}
waitKey();
return 0;
}
运行结果:
三、组内分工
暂时未定