当前位置: 首页 > 编程日记 > 正文

二维码Data Matrix的解码实现(zxing-cpp)

二维码Data Matrix的介绍可以参考http://blog.csdn.net/fengbingchun/article/details/44279967 ,以下是通过zxing-cpp开源库实现的对Data Matrix进行解码的测试代码:

#include "funset.hpp"
#include <string>
#include <fstream>
#include <Windows.h>#include <zxing/LuminanceSource.h>
#include <zxing/common/Counted.h>
#include <zxing/Reader.h>
#include <zxing/aztec/AztecReader.h>
#include <zxing/common/GlobalHistogramBinarizer.h>
#include <zxing/DecodeHints.h>
#include <zxing/datamatrix/DataMatrixReader.h>#include <opencv2/opencv.hpp>#include "zxing/MatSource.h"static void utf8_to_gbk(const char* utf8, char* gbk) {const int maxlen = 128;wchar_t unicode_str[maxlen];int outlen = MultiByteToWideChar(CP_UTF8, 0, utf8, strlen(utf8), unicode_str, maxlen);outlen = WideCharToMultiByte(CP_ACP, 0, unicode_str, outlen, gbk, 128, NULL, NULL);gbk[outlen] = '\0';
}int test_DataMatrix_decode()
{std::string image_name = "E:/GitCode/BarCode_Test/test_images/data_matrix_encode.jpg";cv::Mat matSrc = cv::imread(image_name, 1);if (!matSrc.data) {fprintf(stderr, "read image error: %s", image_name.c_str());return -1;}cv::Mat matGray;cv::cvtColor(matSrc, matGray, CV_BGR2GRAY);zxing::Ref<zxing::LuminanceSource> source = MatSource::create(matGray);int width = source->getWidth();int height = source->getHeight();fprintf(stderr, "image width: %d, height: %d\n", width, height);zxing::Ref<zxing::Reader> reader;reader.reset(new zxing::datamatrix::DataMatrixReader);zxing::Ref<zxing::Binarizer> binarizer(new zxing::GlobalHistogramBinarizer(source));zxing::Ref<zxing::BinaryBitmap> bitmap(new zxing::BinaryBitmap(binarizer));zxing::Ref<zxing::Result> result(reader->decode(bitmap, zxing::DecodeHints(zxing::DecodeHints::DATA_MATRIX_HINT)));std::string txt = "E:/GitCode/BarCode_Test/test_images/data_matrix_encode.txt";std::ifstream in(txt);if (!in.is_open()) {fprintf(stderr, "fail to open file: %s\n", txt.c_str());return -1;}std::string str1;std::getline(in, str1);char tmp[128];utf8_to_gbk(str1.c_str(), tmp);std::string ret = std::string(tmp);fprintf(stderr, "actual        result: %s\n", ret.c_str());std::string str2 = result->getText()->getText();fprintf(stdout, "recognization result: %s\n", str2.c_str());if (ret.compare(str2) == 0) {fprintf(stderr, "=====  recognition is correct  =====\n");}else {fprintf(stderr, "=====  recognition is wrong =====\n");return -1;}in.close();return 0;
}
测试图像如下:

输出结果如下:


GitHub:https://github.com/fengbingchun/Barcode_Test



相关文章:

PHP mongodb 的使用

mongodb 不用过多的介绍了&#xff0c;NOSQL的一种&#xff0c;是一个面向文档的数据库&#xff0c;以其方便灵活的数据结构&#xff0c;对于开发者来说是比较友好的&#xff0c;同时查询的速度也是比较快的&#xff0c;现在好多网站 开始使用mongodb ,具体的介绍可以网上查找。…

必看,61篇NeurIPS深度强化学习论文解读都这里了

作者 | DeepRL来源 | 深度强化学习实验室&#xff08;ID: Deep-RL&#xff09;NeurIPS可谓人工智能年度最大盛会。每年全球的人工智能爱好者和科学家都会在这里聚集&#xff0c;发布最新研究&#xff0c;并进行热烈探讨&#xff0c;大会的技术往往这未来几年就会演变成真正的研…

07-09-Exchange Server 2019-配置-Outlook 2019

[在此处输入文章标题] 《系统工程师实战培训》 -07-部署邮件系统 -09-Exchange Server 2019-配置-Outlook 2019 作者&#xff1a;学 无 止 境 QQ交流群&#xff1a;454544014 MSUCDemo01 MSUCDemo02 MSUCDemo03 MSUCDemo04 MSUCDemo05 启用邮箱 MSUCDemo01i-x-Cloud.com MSUCDe…

二维码QR Code简介及其解码实现(zxing-cpp)

二维码QR Code(Quick Response Code)是由Denso公司于1994年9月研制的一种矩阵二维码符号&#xff0c;它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。二维码QR Code呈正方形&#xff0c;常见的是黑白两色。在3…

jQuery学习(一)

因为项目需要&#xff0c;同时也因为兴趣&#xff0c;在近一段时间研究和使用了jQuery&#xff0c;它真的是太强大了&#xff0c;代码非常的优雅和简洁&#xff0c;好后悔现在才开始了解它&#xff0c;虽然目前网络上关于jQuery的资料、学习心得&#xff0c;教程多得你看不完&a…

知乎算法团队负责人孙付伟:Graph Embedding在知乎的应用实践

演讲嘉宾 | 孙付伟出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;9月6-7日&#xff0c;在由CSDN主办的2019中国AI开发者大会&#xff08;AI ProCon 2019&#xff09;的 机器学习专场中&#xff0c;知乎算法团队负责人孙付伟在机器学习专场中分享了《Graph Embedding…

一维码Codabar简介及其解码实现(zxing-cpp)

一维码Codabar&#xff1a;由4条黑色线条&#xff0c;3条白色线条&#xff0c;合计7条线条所组成&#xff0c;每一个字元与字元之间有一间隙Gap做区隔。条形码Codabar包含21个字元&#xff1a;(1)、10个数字0~9;(2)、””, ”-”,”*”, ”/”, ”$”, .”, ”:”等7个特殊符号…

node 压缩模块速成

1. 压缩与解压缩处理可以使用zlib模块进行压缩及解压缩处理,压缩文件以后可以减少体积&#xff0c;加快传输速度和节约带宽 代码2. 压缩对象压缩和解压缩对象都是一个可读可写流方法说明zlib.createGzip返回Gzip流对象&#xff0c;使用Gzip算法对数据进行压缩处理zlib.createGu…

hadoop作业初始化过程详解(源码分析第三篇)

&#xff08;一&#xff09;概述我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程。在作业到达JobTracker之后初始化之前&#xff0c;JobTracker会通过submitJob方法&#xff0c;为每个作业都创建一个JobInProgress对象(本文以后简称…

百度无人车急刹车

导语&#xff1a;没人会怀疑人工智能在未来的地位&#xff0c;也没人会怀疑无人驾驶将改变我们的生活&#xff0c;但百度首次出现亏损&#xff0c;“现金牛”业务遭遇越发严重的挑战&#xff0c;无人驾驶行业的征途却越发漫长且荆棘密布&#xff0c;这个公司该如何走到“流着奶…

STM32中EXTI和NVIC的关系

&#xff08;1&#xff09;NVIC(嵌套向量中断)&#xff1a;NVIC是Cortex-M3核心的一部分&#xff0c;关于它的资料不在《STM32的技术参考手册》中&#xff0c;应查阅ARM公司的《Cortex-M3技术参考手册》Cortex-M3的向量中断统一由NVIC管理。 &#xff08;2&#xff09;EXTI(外部…

一维码Code 93简介及其解码实现(zxing-cpp)

一维码Code 93: Code 93码与Code 39码的字符集相同&#xff0c;但93码的密度要比39码高&#xff0c;因而在面积不足的情况下&#xff0c;可以用93码代替39码。它没有自校验功能,为了确保数据安全性,采用了双校验字符,其可靠性比39条码还要高.一维码Code 39的介绍可以参考&#…

HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别

1 扩展库简介OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个致力于实时处理计算机视觉问题的开源库。它最初由Intel公司开发&#xff0c;以GPL许可协议发布&#xff0c;后来由Willow Garage基金会负责开发和维护&#xff0c;以BSD许可协议发布&…

一维码Code 128简介及其解码实现(zxing-cpp)

一维码Code 128&#xff1a;1981年推出&#xff0c;是一种长度可变、连续性的字母数字条码。与其他一维条码比较起来&#xff0c;相对较为复杂&#xff0c;支持的字元也相对较多&#xff0c;又有不同的编码方式可供交互运用&#xff0c;因此其应用弹性也较大。Code 128特性&…

21个必须知道的机器学习开源工具!

作者 | SebastianScholl译者 | 刘静&#xff0c;责编 | 郭芮出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;本文将介绍21种用于机器学习的开源工具。以下为译文&#xff1a;你肯定已经了解流行的开源工具&#xff0c;如R、Python、Jupyter笔记本等。但是&#xff…

eclipse中egit插件使用

2019独角兽企业重金招聘Python工程师标准>>> 这篇文章当时制作有点粗糙&#xff0c;建议阅读升级版&#xff1a;eclipse中egit插件使用--升级版 使用git作为项目的代码管理工具现在是越来越火&#xff0c;网上有各种各样的文章、博客、讨论&#xff0c;其中以命令行…

一维码EAN 8简介及其解码实现(zxing-cpp)

一维码EAN 8&#xff1a;属于国际标准条码&#xff0c;由8个数字组成&#xff0c;属EAN的简易编码形式(EAN缩短码)。当包装面积小于120平方公分以下无法使用标准码时&#xff0c;可以申请使用缩短码。依结构的不同&#xff0c;EAN条码可区分为&#xff1a;1&#xff0e; EAN 1…

三年、四大顶会,深度推荐系统18篇论文只有7个可以复现

作者 | 深度传送门来源 | 深度传送门&#xff08;ID:gh_5faae7b50fc5&#xff09;导读&#xff1a;本文是“深度推荐系统”专栏的第十篇文章&#xff0c;这个系列将介绍在深度学习的强力驱动下&#xff0c;给推荐系统工业界所带来的最前沿的变化。本文主要根据RecSys 2019中论文…

PHP教程中验证正整数is_int($value+0),为什么要这样?

2019独角兽企业重金招聘Python工程师标准>>> 最近学习PHP应用&#xff0c;其中有一段是要验证变量是否为正整数&#xff0c;除了is_numeric($value)外&#xff0c;还要加上is_int($value0)且($value0) > 0&#xff0c;为什么还要 0呢&#xff1f;直接验证$value不…

[给12306支招]取消车票预订-采用全额预售(充值)

为什么80%的码农都做不了架构师&#xff1f;>>> 取消车票预订 预订给车票销售带来的负面效应: 产生"占座", 如果用户不付款就会造成席位在支付期内无法销售.回收成本, 超过支付期需要回收车票.恶意占座, 如果恶意占座会造成大量真正要买票的客户无法购票…

一维码ITF 25简介及其解码实现(zxing-cpp)

一维码ITF 25又称交插25条码&#xff0c;常用在序号&#xff0c;外箱编号等应用。交插25码是一种条和空都表示信息的条码&#xff0c;交插25码有两种单元宽度&#xff0c;每一个条码字符由五个单元组成&#xff0c;其中二个宽单元&#xff0c;三个窄单元。在一个交插25码符号中…

微软云计算业务增长,或成全球最具价值上市公司

近日&#xff0c;有消息指出&#xff0c;微软公司在云计算业务上的豪赌正在取得回报&#xff0c;目前微软已超越苹果公司&#xff0c;成为全球市值最高的上市公司。就在几年前&#xff0c;这家软件制造商的市场前景还不被人看好&#xff0c;随着个人电脑销量的大幅度下滑&#…

激光雷达,马斯克看不上,却又无可替代?

作者 | Xingwei来源 | 辣笔小星&#xff08;ID:XingweiSteven&#xff09;【导读】最近Velodyne挑起的激光雷达LiDAR专利之战成为了业界热点。可以说在严苛的自动驾驶系统中激光雷达成为一种不可替代的传感器。今天让我们详细聊聊激光雷达LIDAR是怎么回事。什么是激光雷达LIDAR…

解决CSV文件中长数字以科学记数格式保存问题

今天因为需要做数据导入到数据表中&#xff0c;用xlxs文件做好了转化为csv文件&#xff0c;结果一看&#xff0c;傻眼了&#xff0c;全部变为科学记数了&#xff0c;在xlxs设置好的单元格格式为文本&#xff0c;可是转化为csv之后就变为了常规&#xff0c;而且也改变了。源文件…

假设检验怎么做?这次把方法+Python代码一并教给你

&#xff08;图片付费下载于视觉中国&#xff09;作者 | Jose Garcia译者 | 张睿毅校对 | 张一豪、林亦霖编辑 | 于腾凯来源 | 数据派THU&#xff08;ID&#xff1a;DatapiTHU&#xff09;【导读】本文中&#xff0c;作者给出了假设检验的解读与Python实现的详细的假设检验中的…

C++实现tar包解析

tar(tape archive)是Unix和类Unix系统上文件打包工具&#xff0c;可以将多个文件合并为一个文件&#xff0c;使用tar工具打出来的包称为tar包。一般打包后的文件名后缀为”.tar”&#xff0c;也可以为其它。tar代表未被压缩的tar文件&#xff0c;已被压缩的tar文件则追加压缩文…

HTML5的学习,各个标签的尝试

style标签的使用可以更好的改变各个标题风格 基本标签<p>,标题<h>,这里br是换行。 超链接的使用&#xff0c;属性href。 表格的使用table。 最后就是图片 img&#xff0c;和音频audio插入地址即可。 今天的学习就分享这些&#xff0c;谢谢大家。转载于:https://www…

Android获取内部和SDCard的存储空间

有时我们开Android项目开发时会用到文件存储或上传文件的一些操作&#xff0c;那么我们前提是要获取到该存储设备的大小&#xff0c;以方便于与我们需要操作的文件的大小做比较&#xff0c;如果操作的文件大小小于存储空间&#xff0c;那么就可以继续操作&#xff0c;反之则不能…

排序算法 Java实现

选择排序 核心思想 选择最小元素&#xff0c;与第一个元素交换位置&#xff1b;剩下的元素中选择最小元素&#xff0c;与当前剩余元素的最前边的元素交换位置。 分析 选择排序的比较次数与序列的初始排序无关&#xff0c;比较次数都是N(N-1)/2。 移动次数最多只有n-1次。 因此&…

正则表达式简介及在C++11中的简单使用

正则表达式(regular expression)是计算机科学中的一个概念&#xff0c;又称规则表达式&#xff0c;通常简写为regex、regexp、RE、regexps、regexes、regexen。 正则表达式是一种文本模式。正则表达式是强大、便捷、高效的文本处理工具。正则表达式本身&#xff0c;加上如同一…