[学习OpenCV攻略][017][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./bin/arm-linux-gcc)
SET(CMAKE_CXX_COMPILER /usr/local/arm/4.3./bin/arm-linux-g++) # where is the target environment
SET(CMAKE_FIND_ROOT_PATH /usr/local/arm/4.3.) # 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./_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 != ){
printf("Usage:\n\%s <image.jpg>", argv[]);
} //打开图片
Mat src; src = imread(argv[], ); //灰度转换 //保存图片
imwrite("dst.jpg", src); return ;
}
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攻略][017][ARM9下移植OpenCV]的更多相关文章
- [学习OpenCV攻略][016][RedHat下安装OpenCV]
安装环境 操作系统: Red Hat Enterprise Linux Server 6.3 相关软件: ffmpeg-0.8.15.tar.bz2.cmake-3.5.1.tar.gz.OpenCV ...
- [OpenCV][ARM9下移植OpenCV]
[OpenCV][ARM9下移植OpenCV] 安装环境 宿主机: Red Hat Enterprise Linux Server 6.3 开发板: mini2440 相关软件: cmake-3. ...
- [学习OpenCV攻略][002][Ubuntu下OpenCV安装]
配置环境 操作系统 Ubuntu 12.04 OpenCV版本 opencv-1.0.0 学习书籍 <学习OpenCV> Liunx软件安装方法主要有3种: 1.编译安装,也就是通过编译源 ...
- Davinci DM6446开发攻略——u-boot-1.3.4移植(1)
UBOOT的版本更新速度比较快,截止今天,稳定正式的版本是u-boot-2009.11-rc2,而TI最新的EVM开发包里的UBOOT是1.2.0版本,国内很多公司还一直使用u-boot-1.1.4和 ...
- DM6446开发攻略——u-boot-1.3.4移植(1)
http://zjbintsystem.blog.51cto.com/964211/282387转载 UBOOT的版本更新速度比较快,截止今天,稳定正式的版本是u-boot-2009.11-rc2 ...
- Davinci DM6446开发攻略——linux-2.6.18移植
TI DAVINCI 使用最新的内核是montavista linux-2.6.18,之前说过,国内很多公司,包括开发板的软件包,一直在使用montavista linux-2.6.10,这个版本准 ...
- [学习OpenCV攻略][011][显示图片]
学习资料: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html 包含头文件 core.hpp:包含 ...
- $ npm install opencv ? 你试试?! 在windows环境下,使用node.js调用opencv攻略
博主之前写过一篇文章<html5与EmguCV前后端实现——人脸识别篇>,叙述的是opencv和C#的故事.最近在公司服务器上更新了一套nodejs环境,早就听闻npm上有opencv模块 ...
- [学习OpenCV攻略][013][Mat - 基本图像容器]
Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针. 矩阵属于多个 Mat 对象, ...
随机推荐
- KVM(一):KVM安装
KVM通俗的说就是一台服务器当多台用,详细介绍去百度和谷歌. 首先查看服务器是否支持虚拟化 [root@KVM ~]# grep -E '(vmx|svm)' /proc/cpuinfo --colo ...
- 优化设计提高sql类数据库的性能
前言 在一个项目中,技术的统一性是最重要的,数据库的设计则是重点中的重点.NoSQL 是目前最流行的数据库,但是其实用性和功能性远不如sql数据库. 实际很多SQL数据库被诟病的性能问题大多是源于程序 ...
- 高度-宽度关系,同一div、不同div高度与宽度关系控制函数
//对象1的高度等于对象2的高度n倍,调用方法:Ht1DivideHt2('#div2','#div1',3)//div2的高度是div1高度的3倍function Ht1DivideHt2(obj1 ...
- Node.js 蚕食计划(三)—— Express 启航
如果看过上一篇<Node.js 蚕食计划>,就会发现手动搭建一个 web 服务器还是比较繁琐 而 express 就是一个可以极大地提高开发效率的 web 开发框架 一.创建项目 在 ex ...
- 转: 谈JAVA_OPTS环境变量不起作用
谈JAVA_OPTS环境变量不起作用 2016-6-14 11:12 最近在处理运行一个java应用时,老是出现java.lang.OutOfMemoryError: Java heap space. ...
- gitlab markdown支持页面内跳转
markdown语法: [to_be_link](#id_name) 标题: ## 2.aaa <a name="id_name"></a> 参考: htt ...
- 深入理解cookie和session
cookie和session在java web开发中扮演了十分重要的作用,本篇文章对其中的重要知识点做一些探究和总结. 1.cookie存在于浏览器 随意打开一个网址,用火狐的调试工具,随意选取一个链 ...
- QQ音乐API-借他人之力实现我的音乐盒
好久没有写博客了,最近升级做爸爸了,很开心的事情.内心又很忧郁,怎么能给媳妇和儿子一个相对好的物质经济条件.现在什么都没有的我,至少还有你们. 话不多说了,这篇博客还是和自己用vue做web app相 ...
- AJAX的写法
AJAX可以说是前端开发必须要会的技术.AJAX是异步的javascript and xml.是他们技术的合称. 1.原生写ajax.很多小伙伴在会了jQuery后,将原生都忘记了,所以原生我还是要在 ...
- .Net程序员学用Oracle系列:视图、函数、存储过程、包
1.视图 在实际操作过程中,本人发现 Oracle 视图定义有一个缺陷,就是不大方便注释,每次写好的注释执行之后再打开视图定义所有注释就全都没了.后来我发现把注释写到末尾就不会被清除,但这样总感觉乖乖 ...