博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
交叉编译OpenCV2.3.1
阅读量:6884 次
发布时间:2019-06-27

本文共 5838 字,大约阅读时间需要 19 分钟。

hot3.png

编译这个库真他麻烦,明明工作重点不是编译OpenCV库,但是时间就偏偏耗在这里,从昨天晚上到现在终于编译成功,说说编译的过程。

我使用的环境linux mint 不记得几了。

编译器arm-linux-gnueabihf-gcc/g++  4.6 (支持硬件浮点),

目标板是 cubieboard开发板 1GHz的CPU(支持硬件浮点),1GRAM,目前算是很强悍一款开发板了,而且价格公道358元,可以在上面运行opencv,杠杆的。买它回来就是在为了在上面做视觉处理的。

我的编译过程是参考csk前辈的编译过程l,但是他的过程有些小问题,要真正试过才知道

这里我放上我编译的opencv库,以及下面要用到的png zlib jpeg依赖库

                                                        

Hi,推荐文件给你 "zlib_jpeg_png.tar.gz"

1.下载硬件浮点编译器,

sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf

2.编译依赖库

2.1 先设定几个环境变量方便后面的编译

export COMPILE_PREFIX=arm-linux-gnueabihf-

export INSTALL_PREFIX=`pwd`/crosscompile_root
export DL_FOLDER=`pwd`/dl
export BUILD_FOLDER=`pwd`/buildpool
export CC=${COMPILE_PREFIX}gcc
同时建立上面的几个目录用于存放编译过程的文件,把下载到的zlib/jpeg/png库放到dl目录中。

mkdir crosscompile_root dl buildpool

2.2 编译zlib,可以把下面的命令制作成一个脚本文件

pushd $BUILD_FOLDER

tar xf $DL_FOLDER/zlib-1.2.7.tar.gz
pushd zlib-1.2.7
./configure --prefix=$INSTALL_PREFIX
make
make install
popd

2.3 编译jpeg 

tar xf $DL_FOLDER/jpegsrc.v8d.tar.gz

pushd jpeg-8d
./configure --host=arm-linux-gnueabihf --prefix=$INSTALL_PREFIX
mkdir -p $INSTALL_PREFIX/bin
mkdir -p $INSTALL_PREFIX/man/man1
make
make install
popd
2.4 编译png

tar xf $DL_FOLDER/libpng-1.5.4.tar.gz

pushd libpng-1.5.4
./configure --host=arm-linux-gnueabihf --prefix=$INSTALL_PREFIX CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib
make
make install
popd

2.5 配置编译opencv

完成上面的几步应该已经在crosscompile_root/lib目录下有相应的库了

cd ~/OpenCV2.3.1/

mkdir build

这build目录里建立toolchain.cmake文件,输入以下内容

set( CMAKE_SYSTEM_NAME Linux )

set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc )
set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ )
set( CMAKE_LIBRARY_PATH ~/crosscompile_root/lib                    ${CMAKE_LIBRARY_PATH})
set( CMAKE_INCLUDE_PATH ~/crosscompile_root/include                   ${CMAKE_INCLUDE_PATH})

然后执行命令,csk前辈在这里有个小错误,我已经改了

cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX -DZLIB_INCLUDE_DIR=$INSTALL_PREFIX/lib -DPNG_INCLUDE_DIR=$INSTALL_PREFIX/lib -DJPEG_INCLUDE_DIR=$INSTALL_PREFIX/lib -DOPENCV_EXTRA_C_FLAGS="-mfpu=neon -I$INSTALL_PREFIX/include -L$INSTALL_PREFIX/lib -Wl, -rpath,$INSTALL_PREFIX/lib" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..

以下是我的cmake结果,可以看到已经禁掉好多东西,因为是嵌入式开发可以吧一些不需要用到的模块去掉,

//

Extracting svn version, please wait...

-- SVNVERSION:  svn:已导出
-- Detected version of GNU GCC: 46 (406)
-- Could NOT find TIFF (missing:  TIFF_LIBRARY)
-- Could NOT find Jasper (missing:  JASPER_LIBRARY JASPER_INCLUDE_DIR)
-- checking for module 'libv4l1'
--   package 'libv4l1' not found
--     Use NumPy headers from: /usr/lib/python2.7/dist-packages/numpy/core/include
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named sphinx
-- Parsing 'cvconfig.h.cmake'
--
-- General configuration for opencv 2.3.1 =====================================
--
--     Built as dynamic libs?:     YES
--     Compiler:                   /usr/bin/arm-linux-gnueabihf-g++
--     C++ flags (Release):          -Wall -pthread -ffunction-sections -mfpu=neon -I/home/msg/crosscompile_root/include -L/home/msg/crosscompile_root/lib -Wl, /home/msg/crosscompile_root/lib -O3 -DNDEBUG  -fomit-frame-pointer -DNDEBUG
--     C++ flags (Debug):            -Wall -pthread -ffunction-sections -mfpu=neon -I/home/msg/crosscompile_root/include -L/home/msg/crosscompile_root/lib -Wl, /home/msg/crosscompile_root/lib -g  -O0 -DDEBUG -D_DEBUG -ggdb3
--     Linker flags (Release):      
--     Linker flags (Debug):        
--
--   GUI:
--     GTK+ 2.x:                   NO
--     GThread:                    NO
--
--   Media I/O:
--     ZLib:                       YES
--     JPEG:                       TRUE
--     PNG:                        TRUE
--     TIFF:                       build
--     JPEG 2000:                  build
--     OpenEXR:                    NO
--     OpenNI:                     NO
--     OpenNI PrimeSensor Modules: NO
--     XIMEA:                      NO
--
--   Video I/O:
--     DC1394 1.x:                 NO
--     DC1394 2.x:                 NO
--     FFMPEG:                     NO
--       codec:                    NO
--       format:                   NO
--       util:                     NO
--       swscale:                  NO
--       gentoo-style:             YES
--     GStreamer:                  NO
--     UniCap:                     NO
--     PvAPI:                      NO
--     V4L/V4L2:                   /1
--     Xine:                       NO
--
--   Other third-party libraries:
--     Use IPP:                    NO
--     Use TBB:                    NO
--     Use ThreadingFramework:     NO
--     Use Cuda:                   NO
--     Use Eigen:                  YES
--
--   Interfaces:
--     Python:                     NO
--     Python interpreter:         /usr/bin/python -B (ver 2.7)
--     Python numpy:               YES
--     Java:                       NO
--
--   Documentation:
--     Sphinx:                     NO
--     PdfLaTeX compiler:          NO
--     Build Documentation:        NO
--
--   Tests and samples:
--     Tests:                      YES
--     Examples:                   NO
--
--   Install path:                 /home/msg/crosscompile_root
--
--   cvconfig.h is in:             /home/msg/OpenCV-2.3.1/build
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/msg/OpenCV-2.3.1/build

///

然后使用ccmake 或者cmake-gui微调,

ccmake .

加入了-mfpu=neon 据说是可以在cubieboard的CPU上进行优化,在ccmake中去掉python,gtk,cuba,1394lib等,因为在arm-linux-gcc编译器里面没有这些相应的库,我就是裁在这里.

3 .直接安装opencv

其实cubieboard上的linaro Ubuntu可以直接从apt-get 安装arm版的opencv,

sudo apt-get install libopencv-*

3.1 测试opencv

#include 
#includee
 int main( int argc, char * argv[] ) { // grab one frame from the camera specified via arg[1] int camera_id = 0; if (argc > 1) camera_id = atoi(argv[1]); cv::VideoCapture cap(camera_id); if(!cap.isOpened()) // check if we succeeded { printf("failed to open the camera with id %d.\n", camera_id); return -1; } // capture one frame cv::Mat frame; cap >> frame; // get a new frame from camera // save to file imwrite("camera_captured.png", frame); return 0;}
编译以上程序

arm-linux-gnueabihf-g++ main.cpp -o main -L/home/msg/crosscompile_root/lib -I/home/msg/crosscompile_root/include -lpthread -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -rpath-link

3.2 把opencv库放到开发板上

复制到SD卡,由于我的是校园网用锐捷的设备,因此搞不到无线网络,也不能用cubieboard上网,很悲剧

sudo cp -r ~/crosscompile/lib/* /media/yoursdcard/usr/local/lib

sudo cp -r ~/main /media/yoursdcard/home/linaro

3.3 执行

./main 0 //0为摄像头编号

得到 png图像

camera_captured.png

转载于:https://my.oschina.net/elinuxer/blog/118877

你可能感兴趣的文章
PostreSQL 的模式创建的代码位于何处
查看>>
java.lang.OutOfMemoryError: Java heap space 解决方法转测试可用
查看>>
linux内存分配方法总结【转】
查看>>
Javascript事件模型系列(四)我所理解的javascript自定义事件
查看>>
PostgreSQL 在何处真正开始写数据
查看>>
[LeetCode] Integer to Roman 整数转化成罗马数字
查看>>
Windows Mobile 6.x 市场将不再提供服务支持
查看>>
小知识~VS2012的xamarin加载失败解决
查看>>
从Linux 访问Windows的文件夹和Windows的共享打印机
查看>>
关于隐式类型var使用最佳实践的讨论
查看>>
Delphi 日期格式问题 - is not a valid date
查看>>
3.3. Photivo
查看>>
流媒体技术原理
查看>>
nodejs express 启动报错:Error: Cannot find module &#39;xxx&#39;
查看>>
10.7. glusterfs
查看>>
[CareerCup] 10.3 Integer not Contain in the File 文件中不包含的数
查看>>
cmd命令查看端口和进程信息
查看>>
顺序查找 && 折半查找
查看>>
SAP HANA中SQLscript的数据类型
查看>>
一個傳統的C2C網站的用戶充值的过程
查看>>