前言

libdmtx是一个开源的二维码解码工具,本文记录在ROS下以及直接使用g++编译器,配置和使用该工具对DM码进行解码的过程。


一、Libdmtx的下载安装

下载地址 GitHub - dmtx/libdmtx: libdmtx Library

先运行autogen.sh,输入如下命令:

./autogen.sh

运行后就出现了configure这个文件,然后依次输入如下命令安装:

./configuremakesudo make install

二、编写测试代码

1.编写测试代码exampleDecode.cpp

代码如下:

#include "opencv2/core.hpp"
#include <opencv2/highgui.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include <dmtx.h>
#include <iostream>
#include <stdio.h>
#include <sys/time.h>
using namespace cv;
using namespace std;int main(int argc, char *argv[])
{struct timezone tz;struct timeval tv;struct timezone tz1;struct timeval tv1;gettimeofday(&tv,&tz);cout << "micronsecond : \t" << tv.tv_sec*1000 +tv.tv_usec/1000 << endl;cv::Mat matImg = cv::imread("/home/{yourname}/catkin_ws/123.JPG", -1);//选择要解码的图片,这里确保有个DM码的图片if(matImg.empty()){return -1;}cv::Size size;cv::Point pt;matImg.locateROI(size, pt);DmtxImage      *img;DmtxDecode     *dec;DmtxRegion     *reg;DmtxMessage    *msg;img = dmtxImageCreate(matImg.data, size.width, size.height, DmtxPack24bppRGB);assert(img != NULL);dec = dmtxDecodeCreate(img, 1);assert(dec != NULL);reg = dmtxRegionFindNext(dec, NULL);if(reg != NULL){msg = dmtxDecodeMatrixRegion(dec, reg, DmtxUndefined);if(msg != NULL){fputs("output: \"", stdout);fwrite(msg->output, sizeof(unsigned char), msg->outputIdx, stdout);fputs("\"\n", stdout);dmtxMessageDestroy(&msg);}dmtxRegionDestroy(&reg);}dmtxDecodeDestroy(&dec);dmtxImageDestroy(&img);gettimeofday(&tv1,&tz1);cout << "micronsecond1 : \t" << tv1.tv_sec*1000 +tv1.tv_usec/1000 << endl;cout << "time(us): \t" << tv1.tv_sec*1000000 +tv1.tv_usec - tv.tv_sec*1000000 -tv.tv_usec << endl;return 0;
}

把以上代码文件放在你的src文件夹下

2.修改Cmakelist文件

修改如下:

cmake_minimum_required(VERSION 3.0.2)
project(cartographer_dev)find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgs)find_package(OpenCV REQUIRED                        COMPONENTSopencv_coreopencv_imgprocopencv_imgcodecsCONFIG
)
include_directories(${OpenCV_INCLUDE_DIRS})catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES cartographer_dev
#  CATKIN_DEPENDS roscpp rospy std_msgs
#  DEPENDS system_lib
)include_directories(
# include${catkin_INCLUDE_DIRS}
)add_executable(exampleDecode src/exampleDecode.cpp)target_link_libraries(exampleDecode  ${OpenCV_LIBS})
target_link_libraries(exampleDecode   dmtx)
target_link_libraries(exampleDecode ${catkin_LIBRARIES})

在你的工作空间

source devel/setup.bash

一下然后

catkin_make

然后运行以下

rosrun {your package name} exampleDecode

就可以解码和看出解码时间了。

3.直接通过g++编译器编译

在命令行输入以下命令

g++ exampleDecode.cpp -o exampleDecode `pkg-config --cflags --libs opencv libdmtx`

Cmakelist文件如下

# cmake needs this line
cmake_minimum_required(VERSION 3.1)# Define project name
project(opencv_example_project)# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV 3.2.0 REQUIRED)
#INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libdmtx)# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    config: ${OpenCV_DIR}")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")# Declare the executable target built from your sources
add_executable(exampleDecode exampleDecode.cpp)# Link your application with OpenCV libraries
target_link_libraries(exampleDecode  PRIVATE ${OpenCV_LIBS})

输入以下命令

 ./exampleDecode

运行结果如下


总结

安装ROS后一般都同时安装了OpenCV,不建议再重新安装更高版本的OpenCV,否则会出现各种问题。

参考文献

Linux下使用libdmtx识别图片上的datamatrix_小袋鼠_Vicky的博客-CSDN博客_libdmtx 识别率低

Linux Ubuntu下安装libdmtx并在Linux下配置OpenCV和libdmtx的Cmakelist,同时对Data Matric码进行解码相关推荐

  1. 深度linux腾讯视频,在UOS/Deepin 20/Ubuntu 18.04下安装腾讯视频Linux版的方法

    要想在UOS.Deepin 20.Ubuntu 18.04操作系统下安装腾讯视频Linux版,必须先去下载Tenvideo_universal_1.0.10_amd64.deb包,然后使用dpkg命令 ...

  2. linux 商业游戏,Ubuntu下安装试玩原生Linux版商业游戏Braid

    这款原生Linux版商业游戏Braid国外出售价大约在80美元左右.每年在Linux平台上发布的原生商业游戏是屈指可数,而且这些游戏的质量也是参差不齐. 不过这款原生Linux版商业游戏Braid还是 ...

  3. Win7下安装Ubuntu11.10(解决linux try(hd0,0):NTFS5:no ang0引导问题)

    Win7下安装Ubuntu11.10(解决linux try(hd0,0):NTFS5:no ang0引导问题) 参考文章: (1)Win7下安装Ubuntu11.10(解决linux try(hd0 ...

  4. 在openSUSE-Leap-15.4-DVD-x86_64下安装网易云音乐linux客户端

    在openSUSE-Leap-15.4-DVD-x86_64下安装网易云音乐linux客户端 打开https://software.opensuse.org/--版本不用选择保持ALL Distrib ...

  5. Linux系统的安装和Android编译环境的配置

    Linux系统的安装和Android编译环境的配置 亲测Android8.1-Android10.0可用 电脑硬件配置 安装Linux系统 配置Android编译环境 常见编译报错 亲测Android ...

  6. Linux入门第五集!MySQL8在Linux上的安装!MySQL的Linux资源分享!

    Linux入门第五集!MySQL8在Linux上的安装!MySQL的Linux资源分享! 一.Mysql的Linux版本下载! 博主采用的是mysql-8.0.25-1.el7.x86_64.rpm- ...

  7. linux18.2安装界面,Ubuntu 18.10下安装Grub Customizer 5.1.0配置grub2图形化界面

    配置Grub2/burg引导装载程序Grub Customizer 5.1.0新增加对Ubuntu 18.10的支持,我们可以用PPA源来安装,同时还支持Ubuntu 18.04.16.04.14.0 ...

  8. TensorFlow工作笔记001---Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码

    技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码, ...

  9. linux下安装sbt_如何在Linux上安装SBT

    linux下安装sbt 介绍 (Introduction) Hi! I am Sanjula, and in this guide I hope to teach you how to install ...

最新文章

  1. JavaScrip(一)JavaScrip的写法
  2. shanghai road map
  3. Android 隐藏底部三个虚拟按键
  4. 在java中图片随机播放_java-以相同顺序随机播放多个文件
  5. vb.net json上传服务器_vue项目编译后自动上传,告别繁琐的操作
  6. Nashorn Multithreading and MT-safety
  7. 用面向对象思想设计奥赛罗游戏
  8. cocos 节点坐标和世界坐标转换 个人理解与应用
  9. TPScan一键ThinkPHP漏洞检测工具使用
  10. excel合并计算机操作,Excel如何快速合并多个单元格的内容?
  11. 恒生电子2018秋招笔经面经(开发岗)
  12. chloe.mysql 源码_AceFx-基于Nfine的Chloe官网及后台源码
  13. zabbix离线安装
  14. STM32F103时钟系统
  15. 白度云下载到存储卡的视频看不了_苹果手机从百度网盘下载的视频如何保存到相册,还有不知道的吗?...
  16. 《数据结构教程(李春葆主编 第五版)》第七章源代码—树和二叉树
  17. Sparse R-CNN: End-to-End Object Detection with Learnable Proposals
  18. 笔记本 触摸板无法使用 解决办法
  19. 做回归分析时import ConvergenceWarning出错的问题
  20. Registration Code

热门文章

  1. input file多选 multiple
  2. python打蛇_页高速缓存(下)_Linux系统编程第 3 期:文件I/O缓存与内存映射视频课程_嵌入式开发视频-51CTO学院...
  3. 实现算命测八字获取节日的工具类-Lunar
  4. redhat linux vim文本编辑工具的笔记
  5. C盘满了怎么分析C盘使用情况 找出C盘大文件
  6. 【DL】第 7 章 :用于音乐生成的Transformers和 MuseGAN
  7. 微信小程序预览二进制流文件
  8. 进制转换二进制转八进制_将二进制数制转换为八进制数制
  9. 我眼里的新人“七宗罪”
  10. java计算机毕业设计中学生作文大赛管理平台源码+mysql数据库+系统+部署+lw文档