ZBar项目简介及安装配置 | 2021SC@SDUSC

2021SC@SDUSC

目录

前言

一、ZBar是什么?

二、ZBar的安装及使用(VS2019 + Zbar + OpenCV)

1.软件安装

1.1 ZBar安装

1.2 OpenCV安装

2.环境配置

2.1 系统环境配置

2.2 Visual Studio环境配置

3.代码测试

4.遇到问题

 总结


前言

在我们的日常生活中,处处可见条形码和二维码。

在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码;你去你们学校图书馆的自助机上借书还书时识别的也是条形码;哦,对了,你还记得每次大型考试答题卡上都会贴上监考老师分发给你的那个标签吗?还是条形码;甚至现在你随随便便逛个超市或便利店,收银员或者自助机也都是通过扫商品条形码给你计价的。条形码在我们的日常生活中真的是随处可见。

到了后来,2016年之后,二维码也渐渐开始普及起来,现在二维码几乎成了我们日常生活的一部分:新朋友微信加个好友;上下班乘公交地铁;平时买东西付款;和别人收付款的当面交易;各个大小公司或者商场甚至地摊搞活动的时候也告诉你扫码有优惠。

现在只要你出门,或者你不出门,你只要用手机,你是个网民,你就很难不接触到各种条形码与二维码。

那么这些个条形码识别和二维码识别是怎么完成的呢?

这就涉及到了本文要介绍的ZBar项目。


一、ZBar是什么?

ZBar条形码阅读器(ZBar bar code reader)是一个用于读取条形码的开源软件套件。

它支持识别不同来源的文件类型,如视频流、图像文件和原始数据强度传感器。ZBar的算法可识别大部分种类的一维码(条形码),比如I25,CODE39,CODE128,二维码等等。

ZBar项目包括C、C++、Python和Perl多种语言共同实现以及用于Qt、GTK和PyGTK的GUI小部件。

二、ZBar的安装及使用(VS2019 + Zbar + OpenCV)

1.软件安装

1.1 ZBar安装

ZBar bar code reader - Downloadhttp://zbar.sourceforge.net/download.html

 下载后根据流程安装,需要注意此处勾选 Development Headers and Libraries

 最后将项目安装在常用文件夹下(此处我选择放在C:\Program Files (x86)下)

由于ZBar的默认环境为win32,若在64位机器上使用Zbar,还需要一些库文件

从github下载64位ZBar的源码包

ZbarWin64下载https://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 文件夹

这部分配置教程来自 原文链接:https://blog.csdn.net/weixin_40689871/article/details/109462028

1.2 OpenCV安装

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在LinuxWindowsAndroidMac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

这里采用OpenCV库辅助进行二维码的采集和代码的测试。

OpenCV下载icon-default.png?t=L892https://opencv.org/releases/根据流程解压、安装后,最后将项目放在常用文件夹下(此处我选择放在C:\Program Files (x86)下)

2.环境配置

2.1 系统环境配置

打开 高级系统设置--环境变量--系统变量--Path

把OpenCV和Zbar安装包里的这两个文件目录放在系统变量的路径下即可

2.2 Visual Studio环境配置

打开 视图---其他窗口---属性管理器

单击右侧属性管理器,右键debug|x64(其他也可,配置项不同),添加一个新项目属性表,接下来对这个属性表进行配置。

双击刚刚新建的项目的属性表的属性页界面:

(1)VC++目录---包含目录

添加opencv的include路径和zbar的include路径(按照安装路径)

...\opencv\build\include

...\opencv\build\include\opencv

...\opencv\build\include\opencv2

...\ZBar\include

(2) VC++目录---库目录

添加opencv和zbar的lib路径

...\opencv\build\x64\vc15\lib

...\ZBar\lib

(3) 链接器---输入---附加依赖项

添加opencv和zbar的依赖

opencv_world343d.lib(根据安装的版本 在...\opencv\build\x64\vc15\lib中查看)

libzbar-0.lib

libzbar64-0.lib

3.代码测试

配置环境完成后,重启电脑。

测试代码如下:

#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);
    //调用系统摄像头,若只有一个摄像头则参数为0
    VideoCapture cap(1);
	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;
}

使用OpenCV打开电脑摄像头并对视频的每一帧进行采集后,调用Zbar对二维码(或其他码)进行分析

运行结果:

4.遇到问题

测试程序虽然并不复杂,但第一次接触,还是遇到了问题。

CvCapture* capture = cvCreateFileCapture(0);
//类似语句调用OpenCV打开摄像头在调试时会报错

以上代码在编写时没有语法报错,一旦调试就会报错。

[ WARN:0] cvCreateFileCaptureWithPreference: backend FFMPEG doesn't support legacy API anymore.
[ WARN:0] cvCreateFileCaptureWithPreference: backend MSMF doesn't support legacy API anymore.

查找资料发现是因为高版本的OpenCV已经不支持这样的C语言风格的代码,而是建议用上面C++面向对象风格编写代码。

 总结

 ZBar项目涉及知识十分丰富且复杂,本次仅仅在Windows环境下对ZBar进行了安装、配置以及简单的测试和使用,后续小组将开展详细的代码分析工作。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mai゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值