ZBar库64位编译及中文解码

本文提供win64平台ZBar库的编译方法,解决中文解码乱码问题。

不想花时间折腾的同学直接去下载附加资源ZBar64​​​​​​​,是编译好的库,解压即用,有问题请留言。

一、源码修改

本例使用visual studio 2019编译。

感谢作者提供了优秀的开源项目https://github.com/dani4/ZBarWin64

Zbar源码是不支持中文解码的,要实现中文解码需要修改源码重新编译。提醒:备份是个好习惯。要修改的文件是zbar/qrcode/qrdectxt.c。

61行,将3种解码方式修改如下。

  latin1_cd = iconv_open("GBK", "UTF-8");
  sjis_cd = iconv_open("GB2312", "UTF-8");
  utf8_cd = iconv_open("UTF-8", "UTF-8");

具体解码类型可以根据自己需求更改。之后打开sln文件生成dll和lib即可。使用该库的时候只引入libzbar64-0.dll和libzbar64-0.lib还不够,还需要把依赖库libiconv引入,其位置在ZBarWin64\zbar\libiconv,32位和64位根据自己需求选择。

二、opencv 例程

zbar的使用非常简单。下例展示了由opencv读取一张图片并使用zbar解码。

#include <opencv2/opencv.hpp>
#include <zbar.h>


int main() {
	cv::Mat img = cv::imread("qrcode.jpg"); // 读取图像
	std::cout << "输入图像尺寸=" << img.size << std::endl;
	std::cout << "输入通道数=" << img.channels() << std::endl;
	cv::namedWindow("img", 0);
	cv::imshow("img", img);
	cv::waitKey(0);
	cv::Mat img_gray;
	cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);彩色图像须转为灰度
	uchar* raw = (uchar*)img_gray.data;
	int w = img_gray.cols;
	int h = img_gray.rows;
	zbar::ImageScanner scanner;
	scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
	zbar::Image img_zbar(w, h, "Y800", raw, w * h);
	scanner.scan(img_zbar);
	zbar::Image::SymbolIterator symb = img_zbar.symbol_begin();
	if (img_zbar.symbol_begin() == img_zbar.symbol_end()) {
		std::cout << "No code" << std::endl;
	}
	for (; symb != img_zbar.symbol_end(); ++symb) {
		std::cout << "类型:" << symb->get_type_name() << std::endl;
		std::cout << "内容:" << symb->get_data() << std::endl;
	}
	img_zbar.set_data(nullptr,0);
}

实测zbar可以检测到同一张图像中的多个不同类型的码(包括一维和二维),解码速度也很快。

 

参考:

https://www.cnblogs.com/greyorbit/p/8446382.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值