ZBar项目简介及安装配置

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-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库,输出为码的类型和扫码结果:

三、组内分工

本人将负责恢复码字后的规整图像的读取和解析部分的代码分析。

  • 10
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值