分享

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

 icecity1306 2017-06-26

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

一维码Code 39的介绍可以参考:http://blog.csdn.net/fengbingchun/article/details/54587385

以下是通过zxing-cpp开源库实现的对一维码Code 93进行解码的测试代码:

  1. #include "funset.hpp"  
  2. #include <string>  
  3. #include <fstream>  
  4. #include <Windows.h>  
  5.   
  6. #include <zxing/LuminanceSource.h>  
  7. #include <zxing/common/Counted.h>  
  8. #include <zxing/Reader.h>  
  9. #include <zxing/aztec/AztecReader.h>  
  10. #include <zxing/common/GlobalHistogramBinarizer.h>  
  11. #include <zxing/DecodeHints.h>  
  12. #include <zxing/datamatrix/DataMatrixReader.h>  
  13. #include <zxing/MultiFormatReader.h>  
  14. #include <zxing/pdf417/PDF417Reader.h>  
  15. #include <zxing/qrcode/QRCodeReader.h>  
  16. #include <zxing/oned/CodaBarReader.h>  
  17. #include <zxing/oned/Code39Reader.h>  
  18. #include <zxing/oned/Code93Reader.h>  
  19.   
  20. #include <opencv2/opencv.hpp>  
  21.   
  22. #include "zxing/MatSource.h"  
  23.   
  24. int test_Code93_decode()  
  25. {  
  26.     std::string image_name = "E:/GitCode/BarCode_Test/test_images/Code93.png";  
  27.     cv::Mat matSrc = cv::imread(image_name, 1);  
  28.     if (!matSrc.data) {  
  29.         fprintf(stderr, "read image error: %s", image_name.c_str());  
  30.         return -1;  
  31.     }  
  32.   
  33.     cv::Mat matGray;  
  34.     cv::cvtColor(matSrc, matGray, CV_BGR2GRAY);  
  35.   
  36.     zxing::Ref<zxing::LuminanceSource> source = MatSource::create(matGray);  
  37.     int width = source->getWidth();  
  38.     int height = source->getHeight();  
  39.     fprintf(stderr, "image width: %d, height: %d\n", width, height);  
  40.   
  41.     zxing::Ref<zxing::Reader> reader;  
  42.     reader.reset(new zxing::oned::Code93Reader);  
  43.   
  44.     zxing::Ref<zxing::Binarizer> binarizer(new zxing::GlobalHistogramBinarizer(source));  
  45.     zxing::Ref<zxing::BinaryBitmap> bitmap(new zxing::BinaryBitmap(binarizer));  
  46.     zxing::Ref<zxing::Result> result(reader->decode(bitmap, zxing::DecodeHints(zxing::DecodeHints::CODE_93_HINT)));  
  47.   
  48.     std::string txt = "E:/GitCode/BarCode_Test/test_images/Code93.txt";  
  49.     std::ifstream in(txt);  
  50.     if (!in.is_open()) {  
  51.         fprintf(stderr, "fail to open file: %s\n", txt.c_str());  
  52.         return -1;  
  53.     }  
  54.   
  55.     std::string str1;  
  56.     std::getline(in, str1);  
  57.     fprintf(stderr, "actual        result: %s\n", str1.c_str());  
  58.     std::string str2 = result->getText()->getText();  
  59.     fprintf(stdout, "recognization result: %s\n", str2.c_str());  
  60.   
  61.     if (str1.compare(str2) == 0) {  
  62.         fprintf(stderr, "=====  recognition is correct  =====\n");  
  63.     }  
  64.     else {  
  65.         fprintf(stderr, "=====  recognition is wrong =====\n");  
  66.         return -1;  
  67.     }  
  68.   
  69.     in.close();  
  70.   
  71.     return 0;  
  72.   
  73. }  
测试图像如下:


测试结果如下:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多