[OpenCV][ARM9下移植OpenCV]

 

安装环境

宿主机:

Red Hat Enterprise Linux Server 6.3

开发板:

mini2440

相关软件:

cmake-3.5.1.tar.gz、OpenCV-2.3.1a.tar.bz2

下载地址:

CMake:

https://cmake.org/files/v3.5/cmake-3.5.1.tar.gz

OpenCV:

http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.3.1/OpenCV-2.3.1a.tar.bz2

安装过程

CMake安装

说明:

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。用它来产生OpenCV编译时用到的Makefile文件。

步骤:

1.解压

tar xvf cmake-3.5.1.tar.gz

cd cmake-3.5.1

2.配置

./configure --prefix=/usr  //生成Makefile,安装位置/usr

3.编译

make   //通过Makefile编译源代码

4.安装

make install   //文件安装在/usr/路径下

5.测试

cmake   //执行cmake命令显示cmake版本号和帮助信息表示安装成功

OpenCV安装

说明:

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库。编译和运行调用OpenCV库函数的程序时需要用到OpenCV库和头文件。

1.解压

tar xvf OpenCV-2.3.1a.tar.bz2

cd OpenCV-2.3.1

2.配置

2.1.编写配置文件

vim toolchain.cmake

# this one is important
SET(CMAKE_SYSTEM_NAME Linux) # specify the cross compiler
SET(CMAKE_C_COMPILER /usr/local/arm/4.3.2/bin/arm-linux-gcc)
SET(CMAKE_CXX_COMPILER /usr/local/arm/4.3.2/bin/arm-linux-g++) # where is the target environment
SET(CMAKE_FIND_ROOT_PATH /usr/local/arm/4.3.2) # search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

2.2.生成编译文件

mkdir _install   //创建安装目录

cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_INSTALL_PREFIX=${PWD}/_install/   //生成Makefile

2.3.修改编译文件

ccmake .

WITH_FFMPEG                      OFF   //关闭视频解码,如果需要先编译相关库
WITH_GSTREAMER OFF //关闭视频解码,如果需要先编译相关库
WITH_GTK OFF //关闭图形界面,如果需要先编译相关库
WITH_TIFF OFF //关闭图片格式,如果需要先编译相关库

按下c生效配置,按下e退出配置,按下q退出配置。

3.编译

make   //通过Makefile编译源代码

如果遇到错误:

/space/work/thesis/000/OpenCV-2.3.1/modules/flann/include/opencv2/flann/dist.h:63:error: 'fabsl' was not declared in this scope。

修改fabsl为fabs,然后继续make。

如果遇到错误:

Linking CXX executable ../../bin/opencv_test_calib3d

../../lib/libopencv_core.so: undefined reference to `pthread_key_create'

../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'

../../lib/libopencv_ts.so: undefined reference to `pthread_key_delete'

../../lib/libopencv_core.so: undefined reference to `pthread_once'

../../lib/libopencv_core.so: undefined reference to `clock_gettime'

../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'

collect2: ld returned 1 exit status

修改/opt/opencv2.3.1目录下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread –lrt,然后继续make。

4.安装

make install   //文件安装在${PWD}/_install/路径下

5.测试

5.1.编写Makefile

vim Makefile

prefix = .../OpenCV-2.3.1/_install
libdir = $(prefix)/lib
includedir_old = $(prefix)/include/opencv
includedir_new = $(prefix)/include Libs = -L$(libdir) -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
Cflag = -I$(includedir_old) -I$(includedir_new) % : %.c
arm-linux-g++ $(Libs) $(Cflag) $^ -o $@ % : %.cpp
arm-linux-g++ $(Libs) $(Cflag) $^ -o $@

5.2.编写测试程序

vim test.cpp

#include <stdio.h>
#include <cv.h>
#include <highgui.h> using namespace cv; int main(int argc, char **argv){
//参数检测
if(argc != 2){
printf("Usage:\n\%s <image.jpg>", argv[1]);
} //打开图片
Mat src; src = imread(argv[1], 0); //灰度转换 //保存图片
imwrite("dst.jpg", src); return 0;
}

5.3.复制程序和链接库到开发板

cp .../OpenCV-2.3.1/_install/lib/* .../rootfs/lib/

cp test .../rootfs/sbin

5.4.运行程序

./test image.jpg   //如果成功保存灰度图片说明移植成功

如果缺少相关库通过下面命令查找并复制到开发板

arm-linux-gcc -print-file-name=libxxx.so

cp .../lib/libxxx.* .../rootfs/lib

参考文档

http://blog.csdn.net/embeddedman/article/details/7416934

http://blog.csdn.net/eagelangel/article/details/7232364

http://www.cnblogs.com/emouse/archive/2013/04/01/2993842.html

http://blog.sina.com.cn/s/blog_5ca0198e0101iphz.html

http://blog.csdn.net/wc7620awjh/article/details/8268447

http://www.tuicool.com/articles/yAFnQ3

http://blog.sina.com.cn/s/blog_627bb2cf0101ge3r.html

http://www.vtk.org/Wiki/CMake_Cross_Compiling#Setting_up_the_system_and_toolchain

相关移植

libtiff交叉编译

./configure --host=arm-linux CC=arm-linux-gcc CXX=arm-linux-g++ --prefix=${PWD}/_install/

make

make install

file libtiff.so.5.2.4   //查看版本是否为ARM

cp _install/lib/* .../rm-none-linux-gnueabi/libc/armv4t/usr/lib -rf   //复制到编译器链接库目录

cp _install/inclue/* .../rm-none-linux-gnueabi/libc/armv4t/usr/inclue -rf   //复制到编译器头文件目录

arm-linux-gcc -print-file-name=libtiff.so   //显示库全路径表示已经生效

cp _install/lib/* .../rootfs/lib -rf   /复制到开发板链接库目录

ffmpeg交叉编译

./configure --enable-cross-compile --arch=arm --target-os=linux --cross-prefix=arm-linux-  --enable-shared --prefix=${PWD}/_install

make

make install

file libavcodec.so.53.8.0   //查看版本是否为ARM

cp _install/lib/* .../rm-none-linux-gnueabi/libc/armv4t/usr/lib -rf   //复制到编译器链接库目录

cp _install/inclue/* .../rm-none-linux-gnueabi/libc/armv4t/usr/inclue -rf   //复制到编译器头文件目录

arm-linux-gcc -print-file-name=libavcodec.so   //显示库全路径表示已经生效

cp _install/lib/* .../rootfs/lib -rf   /复制到开发板链接库目录

[OpenCV][ARM9下移植OpenCV]的更多相关文章

  1. [学习OpenCV攻略][017][ARM9下移植OpenCV]

    安装环境 宿主机: Red Hat Enterprise Linux Server 6.3 开发板: mini2440 相关软件: cmake-3.5.1.tar.gz.OpenCV-2.3.1a.t ...

  2. Ubuntu下移植OpenCv

    通过近一周的时候终于成功交叉编译opencv成功了,真心不容易.有一句话乃真理也,凡事贵在坚持.过程总是痛苦的,因为不懂得很多问题但是又需要面对很多问题,最大的收获就是耐心解决所有问题后就懂得这些了. ...

  3. zedboard上移植OPENCV库

    zedboard上移植OPENCV库 之前做了很多移植OPENCV库的工作,但是需要包含的各种库,需要交叉编译,X264 ,JPGE ,FFMPGE等等 注意:在<嵌入式系统软硬件协同设计实战指 ...

  4. zedboard开发板上移植opencv代码(立体匹配)

    前言 公司要做立体匹配相关的项目,已有matlab和c++版本,可是不能做到实时显示立体信息,想要硬件实现实时,无奈本渣也是个硬件的新手,先按照实验室lyq同学的思路在zedboard开发板的纯ARM ...

  5. Ubuntu下多个版本OpenCV管理(Multiple Opencv version)

    背景: 最近,在Nvidia的GPU嵌入式开发板Jetson TX1(简称TX1)上移植深度学习目标检测算法YOLO.在TX1上安装了官方提供的opencv版本——OpenCV4Tegra(OpenC ...

  6. Mingw opencv Windows下命令行运行

    1.下载opencv 2.3 http://sourceforge.net/projects/opencvlibrary/files/ 下个opencv-win版本吧 至于版本号就随意吧,我选的是2. ...

  7. Mac-OSX的Python3.5虚拟环境下安装Opencv

    Mac-OSX的Python3.5虚拟环境下安装Opencv 1   关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2   概述 本文是一篇 环境搭建 的基础 ...

  8. 在VS2010下配置OpenCV 2.3

    一.下载OpenCV 2.3:       http://www.opencv.org.cn/download/OpenCV-2.3.0-win-superpack.exe   二.解压 将下载的Op ...

  9. (转)在Mac下使用OpenCV, 在Xcode下使用OpenCV (非常基础,详细)

    转自:http://blog.sciencenet.cn/home.php?COLLCC=3456986939&COLLCC=3456885714&mod=space&uid= ...

随机推荐

  1. Cat 客户端如何构建调用链消息树

    场景 & 代码 Inner0 中的某方法调用了 Inner1,代码 Inner1的代码很简单, Cat通过一个线程本地变量来保存调用链的相关信息,其中核心的数据结构是消息树和操作栈.消息树用来 ...

  2. ubuntu12.04destdrop删除不必要的软件

    sudo apt-get -y --auto-remove purge unity unity-2d*  sudo apt-get -y purge empathy  sudo apt-get -y ...

  3. IDE 、SATA、SCSI 的区别

    http://chuanwang66.iteye.com/blog/1134784 IDE IDE的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,它的 ...

  4. ln 命令详解

    ln 命令 作用:它的功能是为某一个文件在另外一个位置建立一个同步的链接 参数:必要参数:  -b 删除,覆盖以前建立的链接  -d 允许超级用户制作目录的硬链接  -f 强制执行  -i 交互模式, ...

  5. 2.移植uboot-添加2440单板,并实现NOR、NAND启动

    上章分析了uboot启动流程后,接下来便来配置新的单板,实现nor.nand启动 1.首先在uboot里新建单板2440 : cd board/samsung/ cp smdk2410 smdk244 ...

  6. flask 分页

    在我们学习的过程中会遇到这么样的问题,就是在我们学习的过程中会发现需要分页处理,这里呢,给大家介绍书上说的分页. @app.route('/',methods=['GET']) @app.route( ...

  7. thinkphp3.2.3的使用心得(零)

    从模板传参到控制器 模板中代码: <volist name="list" id="vo"> <a href="__CONTROLLE ...

  8. Qt创建停靠悬浮窗口

    1.Qt实现窗口停靠和悬浮使用类QDockWidget,它有两个重要方法用来设置停靠特性以及停靠区域, dw1->setFeatures(QDockWidget::DockWidgetMovab ...

  9. Hyper-V 虚拟网络设置

    目标:搭建一个主机上的网络用来链接主机和虚拟机,并且虚拟机可以通过主机上网. 步骤一:创建一个Internal Network. 步骤二: 创建虚拟机并设置Virtual Switch. 步骤三:将上 ...

  10. jq选择器汇总

    $("div") //标签 $(".box") //类 $("#box") //ID $("a[href][name]" ...