一维码Codabar:由4条黑色线条,3条白色线条,合计7条线条所组成,每一个字元与字元之间有一间隙Gap做区隔。
条形码Codabar包含21个字元:
(1)、10个数字0~9;
(2)、”+”, ”-”,”*”, ”/”, ”$”, .”, ”:”等7个特殊符号;
(3)、A、B、C、D四个英文字母。
Codabar编码方式与125码及Code 39码相同,只有二种粗细比例。
Codabar其起始码/结束码有4*4=16种组合。
Codabar一般应用于物料管理、图书馆、血站和当前的机场包裹发送中,空白区比窄条宽10,非连续性条形码,每个字符表示为4条3空。
以下是通过zxing-cpp开源库实现的对一维码Codabar进行解码的测试代码:
-
#include "funset.hpp"
-
#include
-
#include
-
#include
-
-
#include
-
#include
-
#include
-
#include
-
#include
-
#include
-
#include
-
#include
-
#include
-
#include
-
#include
-
-
#include
-
-
#include "zxing/MatSource.h"
-
-
int test_Codabar_decode()
-
{
-
std::string image_name = "E:/GitCode/BarCode_Test/test_images/Codabar.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 source = MatSource::create(matGray);
-
int width = source->getWidth();
-
int height = source->getHeight();
-
fprintf(stderr, "image width: %d, height: %d\n", width, height);
-
-
zxing::Ref reader;
-
reader.reset(new zxing::oned::CodaBarReader);
-
-
zxing::Ref binarizer(new zxing::GlobalHistogramBinarizer(source));
-
zxing::Ref bitmap(new zxing::BinaryBitmap(binarizer));
-
zxing::Ref result(reader->decode(bitmap, zxing::DecodeHints(zxing::DecodeHints::CODABAR_HINT)));
-
-
std::string txt = "E:/GitCode/BarCode_Test/test_images/Codabar.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:
阅读(2958) | 评论(0) | 转发(0) |