Windows系统下ZBar库的配置(VS2015+OpenCV3.4.3+ZBar0.10)

ZBar是一个开源的二维码(包括条形码)解码器,可以识别来源于视频流、图像文件、手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR Code(二维码)等常用编码方式的条形码/二维码。

step1 运行环境

1、Windows 10 64位

2、Visual Studio 2015 Professional

3、OpenCV 3.4.3

4、ZBar 0.10

step2 安装

1、在ZBar官网http://zbar.sourceforge.net/download.html下载Windows Installer版本安装。
在这里插入图片描述

2、官网下载安装的仅包含32位lib文件,无法后续配置64位,因此需要多一步操作。
方法一:
在该网站https://github.com/dani4/ZBarWin64下载压缩包,并解压,
(1)将 ZBarWin64-master\lib 文件夹下的 libzbar64-0.lib 文件复制到ZBar安装路径下的 lib 文件夹中,
(2)将 ZBarWin64-master\lib 文件夹下的 libzbar64-0.dll 文件复制到ZBar安装路径下的 bin 文件夹中,
(3)将 ZBarWin64-master\zbar\libiconv\dll_x64 文件夹下的 libiconv.dll 文件复制到ZBar安装路径下的 bin 文件夹中。
方法二:
直接下载修改好的压缩包文件。
链接:https://pan.baidu.com/s/1EAgiYF5S65QpWAnFWS5CrQ 提取码:jesa

step3 配置

1、将ZBar安装目录下的bin文件夹添加至环境变量中。

2、在VS2015中新建一个空项目,在属性管理器中作如下配置:
(1)包含目录:
在这里插入图片描述
(2)库目录:
在这里插入图片描述
(3)链接器->输入->附加依赖项:
在这里插入图片描述

step4 测试

在空项目源文件的cpp文件中添加以下测试代码,可以调用摄像头对二维码进行定位与解码。

#include <zbar.h>
#include <opencv2\opencv.hpp>
#include <iostream>

int main(int argc, char*argv[])
{
	zbar::ImageScanner scanner;
	scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
	cv::VideoCapture capture;
	capture.open(0);  //打开摄像头
	cv::Mat image;
	cv::Mat imageGray;
	std::vector<cv::Point2f> obj_location;
	bool flag = true;

	if (!capture.isOpened())
	{
		std::cout << "cannot open cam!" << std::endl;
	}
	else
	{
		while (flag)
		{
			capture >> image;
			cv::cvtColor(image, imageGray, CV_RGB2GRAY);
			int width = imageGray.cols;
			int height = imageGray.rows;
			uchar *raw = (uchar *)imageGray.data;
			zbar::Image imageZbar(width, height, "Y800", raw, width * height);
			scanner.scan(imageZbar);  //扫描条码
			zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin();
			if (imageZbar.symbol_begin() != imageZbar.symbol_end())  //如果扫描到二维码
			{
				flag = false;
				//解析二维码
				for (int i = 0; i < symbol->get_location_size(); i++)
				{
					obj_location.push_back(cv::Point(symbol->get_location_x(i), symbol->get_location_y(i)));
				}
				for (int i = 0; i < obj_location.size(); i++)
				{
					cv::line(image, obj_location[i], obj_location[(i + 1) % obj_location.size()], cv::Scalar(255, 0, 0), 3);//定位条码
				}
				for (; symbol != imageZbar.symbol_end(); ++symbol)
				{
					std::cout << "Code Type: " << std::endl << symbol->get_type_name() << std::endl; //获取条码类型
					std::cout << "Decode Result: " << std::endl << symbol->get_data() << std::endl;  //解码
				}
				imageZbar.set_data(NULL, 0);
			}
			cv::imshow("Result", image);
			cv::waitKey(50);
		}
		cv::waitKey();
	}
	return 0;
}

识别条码类型:二维码,CSDN大数据微信公众号。
在这里插入图片描述
ZBar目前不支持解码中文,可能需要修改源码进行编译。

参考文章:
https://blog.csdn.net/dcrmg/article/details/52108258
https://www.cnblogs.com/gloria-zhang/p/9011776.html
https://www.cnblogs.com/jsxyhelu/p/7371341.html
http://www.pianshen.com/article/1196260020/
https://blog.csdn.net/MengchiCMC/article/details/77871714
https://blog.csdn.net/weixin_41820730/article/details/79695250
https://blog.csdn.net/skillcollege/article/details/38855023
https://www.cnblogs.com/cjqbaba/p/9073908.html

Juliet 于 2019.9

猜你喜欢

转载自blog.csdn.net/stjuliet/article/details/100972016
今日推荐