ZBar移植到ARM
2017-12-09 14:40
1706 查看
之前在《 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:
编译输出可执行文件:
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系统上运行:
运行效果图如下:
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:
#include <opencv2/opencv.hpp> #include <iostream> #include <stdio.h> #include "zbar.h" int main(int argc, char** argv){ if(argc < 2){ std::cout << "Usage: ./test_zbar barcode.png" << std::endl; return -1; } cv::Mat src = cv::imread(argv[1], 1); cv::Mat gray; if (src.channels() == 1) gray = src; else cv::cvtColor(src, gray, CV_RGB2GRAY); int width = gray.cols; int height = gray.rows; // create a reader zbar::ImageScanner scanner; // configure the reader scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1); unsigned char *pdata = (unsigned char *)gray.data; zbar::Image imageZbar(width, height, "Y800", pdata, width * height); int n = scanner.scan(imageZbar); if (n > 0){ // extract results for (zbar::Image::SymbolIterator symbol = imageZbar.symbol_begin(); symbol != imageZbar.symbol_end(); ++symbol) { // do something useful with results std::string decodedFmt = symbol->get_type_name(); std::string symbolData = symbol->get_data(); cv::putText(src, decodedFmt, cv::Point(10, 20), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(255, 0, 0), 1); cv::putText(src, symbolData, cv::Point(10, 60), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(255, 0, 0), 1); std::cout << decodedFmt << std::endl; std::cout << symbolData << std::endl; } }else{ char error_str[64]; sprintf(error_str, "Not got a barcode!"); cv::putText(src, error_str, cv::Point(10, 20), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 1); std::cout << "Not got a barcode!" << std::endl; } cv::imwrite("result.png", src); // clean up imageZbar.set_data(NULL, 0); }
编译输出可执行文件:
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系统上运行:
运行效果图如下:
相关文章推荐
- 通过ssh连接开发板——arm-linux下ssh的移植
- opencv1.0移植到arm中的问题
- arm-linux-gcc-4.4.1+Linux-2.6.31.6+busybox-1.15.1在TQ2440的移植
- 嵌入式开发远程调试arm-linux-gdb的移植
- 移植ntp服务到arm-linux平台
- 移植ssh到arm
- arm-linux下移植的qt和tslib那些鸟事
- MP3播放器madplay在ARM平台上的移植
- 移植OpenSSH到arm手记
- 如何将ARM SDT的汇编代码移植到GCC环境中
- SSH 成功移植到 ARM 平台
- ARM的嵌入式Linux移植体验之设备驱动
- ARM下一些常用库的移植
- QT4.7.0 在ARM平台移植
- ossp-uuid-1.6.2移植到arm平台
- Fedora9 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到min
- ARM 9 MPlayer 移植总结
- U-Boot在ARM s3c2410上移植过程
- Apache移植到ARM
- 移植mysql到arm平台