ZBar项目简介及安装配置
Posted sdu_DYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZBar项目简介及安装配置相关的知识,希望对你有一定的参考价值。
2021SC@SDUSC
目录
二、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下载
下载并解压,将 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 文件夹。
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 <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;
}
这段代码,调用了zbar库和opencv库,输出为码的类型和扫码结果:
三、组内分工
本人将负责恢复码字后的规整图像的读取和解析部分的代码分析。
以上是关于ZBar项目简介及安装配置的主要内容,如果未能解决你的问题,请参考以下文章