2021SC@SDUSC
目录
一、ZBar项目简介
1. ZBar是什么
2. ZBar的工作原理
3. ZBar的工作流程
二、ZBar的安装和配置(Windows操作系统 VS2019+opencv)
一、ZBar项目简介
1. ZBar是什么
ZBar条形码阅读器是一个开源软件,适用于读取不同来源的条形码,如视频流、图像文件和原始强度传感器。它支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128,Code 39, Codabar, Interleaved 2/5和二维码。包括在库是解码捕获的条形码图像和图像的基本应用程序,使用视频设备(如网络摄像头)作为条形码扫描仪。对于开发者,支持语言绑定包括C、C++、Python和Perl,以及用于Qt、GTK和PyGTK的GUI小部件。
该项目旨在创建一个高性能、稳定、健壮的库组件,并提供支持基础设施,使其易于在各种应用程序中使用。
2. ZBar的工作原理
条形码“图像扫描仪”的常见设计是将数字图像处理技术应用于包含条形码的图像:精确的细节各不相同,但这通常涉及几个过滤步骤,以清除噪声、锐化和增强对比度、边缘检测和形状分析,以确定符号位置和方向,最后从原始图像中提取数据。所有这些处理阶段都需要CPU周期和内存资源,并且通常对各种“过滤器参数”配置非常敏感,最终用户很难理解和设置这些配置。
ZBar库使用了一种更接近“魔杖”和“激光”扫描仪使用的方法:线性(1D)条形码设计为通过一个简单的光传感器在符号的明暗区域进行解码。利用这一点,ZBar实现对图像进行线性扫描,将每个像素视为单个光传感器的样本。数据在飞行中被扫描、解码和组装。
ZBar借鉴了现代处理范式,进一步将这一思想抽象为一个分层流模型。处理分为独立的层,具有定义良好的接口,可以一起使用,也可以单独插入任何其他系统。
3. ZBar的工作流程
二、ZBar的安装和配置(Windows操作系统 VS2019+opencv)
1.单击右侧属性管理器,右键debug|x64,添加新项目属性表,名字随意。
2.安装opencv和zbar
Releases - OpenCVhttps://opencv.org/releases/
opencv选择3.4.3
ZBar bar code reader - Downloadhttp://zbar.sourceforge.net/download.html
ZBar选择windows版本
下载完成后运行.exe文件进行安装
3.ZBar是在win32环境下的,要用x64的,还需要一些库文件,github下载
GitHub - dani4/ZBarWin64: Clone of the zbar library. Created to compile as x64 library under VS2013Clone of the zbar library. Created to compile as x64 library under VS2013 - GitHub - dani4/ZBarWin64: Clone of the zbar library. Created to compile as x64 library under VS2013https://github.com/dani4/ZBarWin64
下载并解压,将 ZBarWin64-masterlib 文件夹下 libzbar64-0.lib 文件复制到ZBar安装路径下的 lib 文件夹;将 ZBarWin64-masterlib 文件夹下 libzbar64-0.dll 文件复制到ZBar安装路径下的 bin 文件夹;将ZBarWin64-masterzbarlibiconvdll_x64文件夹下 libiconv.dll 复制到ZBar安装路径下的bin 文件夹。
4.回到刚刚新建的opencvPropertySheet属性表的属性页界面
第一个 VC++目录--包含目录,添加opencv的include路径和zbar的include路径;
第二个 VC++目录--库目录,添加opencv和zbar的lib路径;
第三个 链接器--输入-附加依赖项,添加opencv和zbar的依赖:opencv_world340d.lib、libzbar-0.lib、libzbar64-0.lib。
5.配置环境变量
新建opencv和zbar的bin路径
6.重启电脑,打开vs项目,测试如下代码
#include// Gaussian Blur #include #include #include // OpenCV window I/O #include #include #include #include #include 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; }
这段代码,调用了zbar库和opencv库,输出为码的类型和扫码结果:
三、组内分工本人将负责恢复码字后的规整图像的读取和解析部分的代码分析。



