[OpenCV][ARM9下移植OpenCV]
[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]的更多相关文章
- [学习OpenCV攻略][017][ARM9下移植OpenCV]
安装环境 宿主机: Red Hat Enterprise Linux Server 6.3 开发板: mini2440 相关软件: cmake-3.5.1.tar.gz.OpenCV-2.3.1a.t ...
- Ubuntu下移植OpenCv
通过近一周的时候终于成功交叉编译opencv成功了,真心不容易.有一句话乃真理也,凡事贵在坚持.过程总是痛苦的,因为不懂得很多问题但是又需要面对很多问题,最大的收获就是耐心解决所有问题后就懂得这些了. ...
- zedboard上移植OPENCV库
zedboard上移植OPENCV库 之前做了很多移植OPENCV库的工作,但是需要包含的各种库,需要交叉编译,X264 ,JPGE ,FFMPGE等等 注意:在<嵌入式系统软硬件协同设计实战指 ...
- zedboard开发板上移植opencv代码(立体匹配)
前言 公司要做立体匹配相关的项目,已有matlab和c++版本,可是不能做到实时显示立体信息,想要硬件实现实时,无奈本渣也是个硬件的新手,先按照实验室lyq同学的思路在zedboard开发板的纯ARM ...
- Ubuntu下多个版本OpenCV管理(Multiple Opencv version)
背景: 最近,在Nvidia的GPU嵌入式开发板Jetson TX1(简称TX1)上移植深度学习目标检测算法YOLO.在TX1上安装了官方提供的opencv版本——OpenCV4Tegra(OpenC ...
- Mingw opencv Windows下命令行运行
1.下载opencv 2.3 http://sourceforge.net/projects/opencvlibrary/files/ 下个opencv-win版本吧 至于版本号就随意吧,我选的是2. ...
- Mac-OSX的Python3.5虚拟环境下安装Opencv
Mac-OSX的Python3.5虚拟环境下安装Opencv 1 关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2 概述 本文是一篇 环境搭建 的基础 ...
- 在VS2010下配置OpenCV 2.3
一.下载OpenCV 2.3: http://www.opencv.org.cn/download/OpenCV-2.3.0-win-superpack.exe 二.解压 将下载的Op ...
- (转)在Mac下使用OpenCV, 在Xcode下使用OpenCV (非常基础,详细)
转自:http://blog.sciencenet.cn/home.php?COLLCC=3456986939&COLLCC=3456885714&mod=space&uid= ...
随机推荐
- Python学习(一):编写购物车
1.购物车流程图: 2.代码实现: #!/usr/bin/env python #coding=utf-8 ChoiceOne =''' 1.查看余额 2.购物 3.退出 ''' ChoiceTwo ...
- shell 踩坑记
变量赋值时,等号两边不能有空格: 在判断表达式中,不论是 [ -n "$1" ] 还是 [ -f "$1" ] 都要在变量两侧加上双引号: 在使用与或非判断式 ...
- Windows 刷新DNS缓存
释放IP配置信息 ipconfig /release 刷新DNS ipconfig /flushdns 更新网卡适配器 ipconfig /renew
- axios配合vue+webpack使用
1.安装引用: cnpm install axios --save-dev 2.在组件中引入: import axios from 'axios'; 3.使用示例: 执行GET请求: // 为给定 I ...
- csv文件转json
http://stackoverflow.com/questions/19766266/directly-convert-csv-file-to-json-file-using-the-jackson ...
- CSS 的优先级机制[总结]
样式的优先级 多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External styl ...
- linux apache虚拟主机配置(基于ip,端口,域名)
配置环境: linux版本:Centos6.4 httpd版本: [root@centos64Study init.d]# pwd/etc/init.d[root@centos64Study init ...
- Nginx集群之.Net打造WebApp(支持IOS和安卓)
目录 1 大概思路... 1 2 Nginx集群之.Net打造WebApp(支持IOS和安卓) 1 3 安卓模拟器... 1 4 MUI框架... 3 ...
- jQuery 遍历函数(八)
函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集合中. .children() 获得匹配元素集合中每个元素的所有子元素. .closes ...
- 通过window.location.search获取页面url传递的参数
function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...