二维码Data Matrix的介绍见: http://blog.csdn.net/fengbingchun/article/details/44279967  ,这里简单写了个生成二维码和对二维码进行识别的测试例子,如下:

int test_data_matrix_encode()
{
	std::string str = "中国_abc_DEF_123_@#$!HTTP://WWW.LIBDMTX.ORG";

	DmtxEncode* enc = dmtxEncodeCreate();
	assert(enc != NULL);
	int ret = dmtxEncodeDataMatrix(enc, strlen(str.c_str()), (unsigned char*)str.c_str());
	assert(ret == 1);

	int width = dmtxImageGetProp(enc->image, DmtxPropWidth);
	int height = dmtxImageGetProp(enc->image, DmtxPropHeight);
	int bytesPerPixel = dmtxImageGetProp(enc->image, DmtxPropBytesPerPixel);
	fprintf(stderr, "image width: %d, image height: %d, channels: %d\n", width, height, bytesPerPixel);
	assert(bytesPerPixel == 1 || bytesPerPixel == 3 || bytesPerPixel == 4);

	cv::Mat mat;
	if (bytesPerPixel == 1)
		mat = cv::Mat(height, width, CV_8UC1);
	else if (bytesPerPixel == 3)
		mat = cv::Mat(height, width, CV_8UC3);
	else
		mat = cv::Mat(height, width, CV_8UC4);

	mat.data = enc->image->pxl;

	std::string image_name = "E:/GitCode/BarCode_Test/test_images/data_matrix_encode.jpg";
	cv::imwrite(image_name, mat);

	dmtxEncodeDestroy(&enc);

	return 0;
}

int test_data_matrix_decode()
{
	std::string image_name = "E:/GitCode/BarCode_Test/test_images/data_matrix_encode.jpg";
	cv::Mat mat = cv::imread(image_name, 1);
	if (!mat.data) {
		fprintf(stderr, "read image error\n");
		return -1;
	}

	int width = mat.cols;
	int height = mat.rows;
	int channels = mat.channels();

	DmtxImage* img = dmtxImageCreate(mat.data, width, height, DmtxPack24bppRGB);
	if (!img) {
		fprintf(stderr, "dmtx image create fail\n");
		return -1;
	}

	DmtxDecode* dec = dmtxDecodeCreate(img, 1);
	if (!dec) {
		fprintf(stderr, "dmtx decode create fail\n");
		return -1;
	}

	DmtxRegion* reg = dmtxRegionFindNext(dec, nullptr);
	if (!reg) {
		fprintf(stderr, "dmtx region fail\n");
		return -1;
	}

	DmtxMessage* msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);
	if (!msg) {
		fprintf(stderr, "dmtx decode matrix region fail\n");
		return -1;
	}

	std::string str(reinterpret_cast<char*>(msg->output));
	fprintf(stderr, "decode result: %s\n", str.c_str());

	dmtxMessageDestroy(&msg);
	dmtxRegionDestroy(&reg);
	dmtxDecodeDestroy(&dec);
	dmtxImageDestroy(&img);

	return 0;
}

其中test_data_matrix_encode函数用来生成二维码,如下:

test_data_matrix_decode函数用来简析上面生成的二维码,执行结果如下:

可看出,前后结果是一致的。

GitHubhttps://github.com/fengbingchun/BarCode_Test

二维码Data Matrix编码、解码使用举例的更多相关文章

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

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

  2. (zxing.net)二维码Data Matrix的简介、实现与解码

    一.简介 Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明.Data-Matri ...

  3. 二维码Data Matrix简单介绍及在VS2010中的编译

    Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明.Data-Matrix二维条码 ...

  4. Java实现二维码QRCode的编码和解码

    涉及到的一些主要类库,方便大家下载: 编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html) 解码lib: ...

  5. zxing二维码的生成与解码(C#)

    ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和An ...

  6. 二维码Aztec简介及其解码实现(zxing-cpp)

    Aztec Code是1995年,由Hand HeldProducts公司的Dr. Andrew Longacre设计.它是一种高容量的二维条形码格式.它可以对ASCII和扩展ASCII码进行编码.当 ...

  7. 二维码PDF417简介及其解码实现(zxing-cpp)

    二维码PDF417是一种堆叠式二维条码.PDF417条码是由美国SYMBOL公司发明的,PDF(Portable Data File)意思是"便携数据文件".组成条码的每一个条码字 ...

  8. java 二维码原理以及用java实现的二维码的生成、解码(转)

    http://blog.csdn.net/songylwq/article/details/8643948 http://sjsky.iteye.com/blog/1136934 http://bbs ...

  9. C#实现二维码生成与解码

    前几天公司内部分享了一个关于二维码的例子,觉得挺好玩的,但没有提供完整的源码.有时候看到一个好玩的东西,总想自己Demo一个,于是抽空就自己研究了一下. 一.二维码的原理 工欲善其事,必先利其器.要生 ...

随机推荐

  1. 使用Percona MySQL 5.7版本遇到的坑

    监控DB由于使用的TokuDB引擎,因此选择使用Percona MySQL 5.7版本,在使用过程中遇到了比较多的坑,在这里做一下简单的记录,希望对广大DBA有帮助. load文件飙升导致的DB雪崩 ...

  2. Error:Could not find com.android.tools.build:gradle:3.0.0

    Error:Could not find com.android.tools.build:gradle:3.0.Searched in the following locations:    file ...

  3. September 23rd 2017 Week 38th Saturday

    Lonely people will always remember his life occurred in each person. 寂寞的人总是会用心记住他生命中出现过的每个人. If you ...

  4. SDN2017 第一次作业

    作业链接 阅读LearningNetworkProgramming.pdf,思考后回答以下问题: 你会选择作 网络编程 方向的程序员吗?为什么? 请搜寻并列出至少3个有影响力的中英文SDN的门户网站. ...

  5. 如何处理高并发情况下的DB插入

    1.  我们需要接收一个外部的订单,而这个订单号是不允许重复的 2.  数据库对外部订单号没有做唯一性约束 3.  外部经常插入相同的订单,对于已经存在的订单则拒绝处理 对于这个需求,很简单我们会用下 ...

  6. PHP设计模式系列 - 观察者模式

    观察者模式 观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性.观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码 ...

  7. 在远程登陆的主机上通过命令行源码编译安装 GNU M4、autoconf、automake 等程序

    由于实验需要,最近获得了一个实验室服务器的账号,平常主要通过 ssh 进行远程登陆进行实验.一方面,远程登录的机器只提供终端界面,一般只通过命令行进行任务操作:另一方面,由于是多人共享服务器,故而个人 ...

  8. extjs_05_grid(表格分组)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWRhbV93enM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  9. tomcat服务器宕机解决方案

    报错信息: java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:1 ...

  10. python list 使用技巧

    格式:list[start:stop:step] 示例:a =list(range(0,10))print(a[1:8:2]) #[1, 3, 5, 7]print(a[:8:2]) #[0, 2, ...