当前位置:   article > 正文

ZBar移植到ARM_zbar arm-v7a

zbar arm-v7a

之前在《 OpenCV+ZBar实现条码识别(Windows32位和64位)》介绍过ZBar在Windows上实现条码的识别,现在介绍ZBar如何在ARM架构的嵌入式Linux系统上实现条码识别。

1、下载ZBar源码(传送门

2、交叉编译源码

解压缩源码:

tar -jxvf zbar-0.10.tar.bz2

进入ZBar源码根目录,在根目录下建立output文件夹:

cd zbar-0.10

mkdir output


配置ZBar:

./configure --prefix=$(pwd)/output --host=arm-linux --enable-shared --enable-static --without-imagemagick --without-jpeg --without-python --without-gtk --without-qt --disable-video


编译和安装:

 make && make install


到此,交叉编译完成,进入output目录可以看到输出的文件,如下图:


3、配置pkg-config

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/arm/3thparty_package/zbar-0.10/output/lib/pkgconfig
pkg-config --libs --cflags zbar


4、编写小demo到ARM上测试,小demo为读取一张二维码图片,然后识别,将识别结果在图像上和控制台上显示出来

小demo:

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include "zbar.h"
  5. int main(int argc, char** argv){
  6. if(argc < 2){
  7. std::cout << "Usage: ./test_zbar barcode.png" << std::endl;
  8. return -1;
  9. }
  10. cv::Mat src = cv::imread(argv[1], 1);
  11. cv::Mat gray;
  12. if (src.channels() == 1) gray = src;
  13. else cv::cvtColor(src, gray, CV_RGB2GRAY);
  14. int width = gray.cols;
  15. int height = gray.rows;
  16. // create a reader
  17. zbar::ImageScanner scanner;
  18. // configure the reader
  19. scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
  20. unsigned char *pdata = (unsigned char *)gray.data;
  21. zbar::Image imageZbar(width, height, "Y800", pdata, width * height);
  22. int n = scanner.scan(imageZbar);
  23. if (n > 0){
  24. // extract results
  25. for (zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin();
  26. symbol != imageZbar.symbol_end();
  27. ++symbol) {
  28. // do something useful with results
  29. std::string decodedFmt = symbol->get_type_name();
  30. std::string symbolData = symbol->get_data();
  31. cv::putText(src, decodedFmt, cv::Point(10, 20), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(255, 0, 0), 1);
  32. cv::putText(src, symbolData, cv::Point(10, 60), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(255, 0, 0), 1);
  33. std::cout << decodedFmt << std::endl;
  34. std::cout << symbolData << std::endl;
  35. }
  36. }else{
  37. char error_str[64];
  38. sprintf(error_str, "Not got a barcode!");
  39. cv::putText(src, error_str,
  40. cv::Point(10, 20),
  41. cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 1);
  42. std::cout << "Not got a barcode!" << std::endl;
  43. }
  44. cv::imwrite("result.png", src);
  45. // clean up
  46. imageZbar.set_data(NULL, 0);
  47. }

编译输出可执行文件:

arm-linux-g++ -o test_zbar test_zbar.cpp `pkg-config --libs --cflags zbar` `pkg-config --libs --cflags opencv`


拷贝output目录下的lib目录下的所有文件到嵌入式Linux系统下的/lib目录:

在ARM架构的嵌入式Linux系统上运行:


运行效果图如下:




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/974542
推荐阅读
相关标签
  

闽ICP备14008679号