一维码EAN 13简介及其解码实现(zxing-cpp)
一维码EAN 13:属于国际标准条码, 由13个数字组成,为EAN的标准编码型式(EAN标准码)。
依结构的不同,EAN条码可区分为:
1. EAN 13码: 由13个数字组成,为EAN的标准编码型式(EAN标准码)。
2. EAN 8码: 由8个数字组成,属EAN的简易编码型式(EAN缩短码)。
EAN码的全名为欧洲商品条码(European Article Number),于1977年,由欧洲十二个工业国家所共同发展出来的一种条码。目前已成为一种国际性的条码系统。EAN条码系统的管理是由国际商品条码总会(International Article Numbering Association)负责各会员国的国家代表号码之分配与授权,再由各会员国的商品条码专责机构,对其国内的制造商、批发商、零售商等授予厂商代表号码。
EAN码具有以下特性:
1. 只能储存数字。
2. 可双向扫瞄处理,即条码可由左至右或由右至左扫瞄。
3. 必须有一检查码,以防读取资料的错误情形发生,位于EAN码中的最右边处。
4. 具有左护线、中线及右护线,以分隔条码上的不同部分与撷取适当的安全空间来处理。
5. 条码长度一定,较欠缺弹性,但经由适当的管道,可使其通用于世界各国。
EAN 13码介绍:标准码共13位数,是由”国家代码”3位数,”厂商代码”4位数,”产品代码”5位数,以及”检查码”1位数组成。
EAN 13码的结构如下图:
EAN 13编码方式:
1. 国家号码由国际商品条码总会授权,我国的”国家号码”为”690~691”,凡由我国核发的号码,均须冠上”690”为字头,以别于其他国家。
2. 厂商代码由中国商品条码策进会核发给申请厂商,占四个码,代表申请厂商的号码。
3. 产品代码占五个码,系代表单项产品的号码,由厂商自由编定。
4. 检查码占一个码,系为防止条码扫瞄器误读的自我检查。
以下是通过zxing-cpp开源库实现的对一维码EAN 13进行解码的测试代码:
#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 <zxing/MultiFormatReader.h>
#include <zxing/pdf417/PDF417Reader.h>
#include <zxing/qrcode/QRCodeReader.h>
#include <zxing/oned/CodaBarReader.h>
#include <zxing/oned/Code39Reader.h>
#include <zxing/oned/Code93Reader.h>
#include <zxing/oned/Code128Reader.h>
#include <zxing/oned/EAN8Reader.h>
#include <zxing/oned/EAN13Reader.h>#include <opencv2/opencv.hpp>#include "zxing/MatSource.h"int test_EAN13_decode()
{std::string image_name = "E:/GitCode/BarCode_Test/test_images/EAN13.png";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::oned::EAN13Reader);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::EAN_13_HINT)));std::string txt = "E:/GitCode/BarCode_Test/test_images/EAN13.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);fprintf(stderr, "actual result: %s\n", str1.c_str());std::string str2 = result->getText()->getText();fprintf(stdout, "recognization result: %s\n", str2.c_str());if (str1.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
一维码EAN 13简介及其解码实现(zxing-cpp)相关推荐
- 一维码EAN 8简介及其解码实现(zxing-cpp)
一维码EAN 8:属于国际标准条码,由8个数字组成,属EAN的简易编码形式(EAN缩短码).当包装面积小于120平方公分以下无法使用标准码时,可以申请使用缩短码. 依结构的不同,EAN条码可区分为: ...
- 一维码Code 128简介及其解码实现(zxing-cpp)
一维码Code 128:1981年推出,是一种长度可变.连续性的字母数字条码.与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大. Cod ...
- 一维码ITF 25简介及其解码实现(zxing-cpp)
一维码ITF 25又称交插25条码,常用在序号,外箱编号等应用.交插25码是一种条和空都表示信息的条码,交插25码有两种单元宽度,每一个条码字符由五个单元组成,其中二个宽单元,三个窄单元.在一个交插2 ...
- 一维码Code 93简介及其解码实现(zxing-cpp)
一维码Code 93: Code 93码与Code 39码的字符集相同,但93码的密度要比39码高,因而在面积不足的情况下,可以用93码代替39码.它没有自校验功能,为了确保数据安全性,采用了双校验字 ...
- 二维码QR Code简介及其解码实现(zxing-cpp)
二维码QR Code(Quick Response Code)是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大.可靠性高.可表示汉字及图象多种 ...
- halcon一维码识别
halcon一维码识别 1.创建模板 create_bar_code_model (GenParamName, GenParamValue, BarCodeHandle) GenParamName 可 ...
- iOS上二维码和一维码识别系列一
这段时间在做iOS上二维码和一维码的识别 其间遇到问题无数, 特此总结下来, 希望能给后来的同学供参考 在iOS上, 做二维码识别, 首先在网上查找资料, 查找到ZBar和ZXing这两个开源的识别程 ...
- C# 生成一维码(条形码)和二维码
前言 在使用C#语言进行客户端软件开发时很多时候我们会有需要生成二维码和一维码的需求,在智能工厂和一些商品扫码之类的软件中应用居多,此文章简单记录了一维码和二维码的编码格式和使用ZXing库生成二维码 ...
- 一维码Codabar简介及其解码实现(zxing-cpp)
一维码Codabar:由4条黑色线条,3条白色线条,合计7条线条所组成,每一个字元与字元之间有一间隙Gap做区隔. 条形码Codabar包含21个字元: (1).10个数字0~9; (2)." ...
最新文章
- QT4.8界面设计(MSVC2010X)+位姿哈希+ICP结果
- 水平集嵌入函数的曲率
- android 评价 星星大小,Android RatingBar 评价栏 星星 大小 样式 设置
- 从0到1入门:7天玩转IoT物联网实战营丨IoT喊你加入学习之旅!
- JDK8-u271/u272的jre和jdk/jre的文件有差异
- pytest文档1-环境准备与入门
- DFT频谱泄漏的数学分析及不产生泄漏的条件
- 20181018 考试记录
- 谨慎选择我们的先验 - 对最优拟合概率分布搜索空间的一种约束
- C语言之动态内存管理
- Android多点触控详解
- 【Lesson 3】 小调音阶及小调和弦
- ROS中usb摄像头的使用_(usb_cam)
- Java制作五子棋 V1.0
- java毕业生设计紫陶文化传播与学习交流网站计算机源码+系统+mysql+调试部署+lw
- 核密度函数加权直方图的计算
- 【Matlab】MATLAB矩阵处理
- VMware虚拟机安装Windows11
- python3 + pyserial +pyqt5练习写串口助手(每个功能单独实现,按学习进度更新)
- macOS Catalina 10.15.4(19E266)正式版原版镜像 by OpenCore-0.5.7-03-24编译版
热门文章
- c语言在函数内部宏定义,简单讲解C++的内部和外部函数以及宏的定义
- 使用容联云Celery异步发送短信验证码
- 了解如何使用 Mac 或 PC 同步音乐、影片(新系统不用iTunes)
- 概率论中Z=max(X,Y)和Z=min(X,Y)的分布
- Java后端实习总结--福州之旅
- numpy第三章-索引器、多级索引
- 如何高效的远程办公(在家办公)
- 软件安装时出现Command line option syntax error?
- 如何创建内容安全策略(CSP 标头)
- henauOJ055(猴子吃桃)