OpenCV ffmpeg移植到ARM平台

OpenCV移植到ARM平台---Opencv with ffmpeg to ARM移植总结 阅读详情

前一篇写了如何在移植OpenCV库到ARM平台上,本来我只是用到OpenCV的打开USB摄像头获取图像到IplImage结构中,这用到了V4L2的底层函数。然后进行视频图像的帧处理。

那么如何用OpenCV读写ARM板上的视频文件,并进行视频处理呢?这该又将如何移植呢?

这个就必须要装x264,xvid和ffmpeg,和上一篇中讲的通过V4L2底层函数获取摄像头视频就有点不一样了。

下面就介绍一种方法。

测试环境:Ubuntu 12.04 LTS

OpenCV版本:1.0

交叉编译器:arm-none-linux-gnueabi-4.3.2

步骤如下:

一  交叉编译libjpeg
为了使OpenCV能处理jpeg图像,我们必须事先交叉编译好libjpeg
这里使用的版本是jpegsrc.v6b
1 下载libjpeg源码:ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
2 解压进入目录
3 配置
#./configure --prefix=/root/libjpeg-arm --exec-prefix=/root/libjpeg-arm --enable-shared
--enable-static
下面分别介绍这几个参数的作用:
--prefix=/root/libjpeg-arm : 执行make install 后,会将与体系无关的文件拷贝到此目录下,具
体如下:
/root/libjpeg-arm.....................................
|
+---include........................................
|
---jconfig.h
|
---jerror.h
|
---jmorecfg.h
|
---jpeglib.h
+---man............................................
|
+---man1.......................................
|
---cjeg.1
|
---djpeg.1
|
---jpegtran.1
|
---rdjpgcom.1
|
---wrjpgcom.1
--exec-prefix=/root/libjpeg-arm : 执行make install 后,会将与体系无关的文件拷贝到此目录
下,即将一些可执行程序、动态链接库和静态链接库拷贝到此目录的相应目录下,具体如下:

/root/libjpeg-arm........................................
|
+---bin............................................
|
---cjeg
|
---djpeg
|
---jpegtran
|
---rdjpgcom
|
---wrjpgcom
+---lib...........................................
|
---libjpeg.la
|
---libjpeg.so
|
---libjpeg.so.62
|
---libjpeg.so.62.0.0
--enable-shared : 用GNU libtool编译成动态链接库 。
4 修改生成的Makefile文件:
# The name of your C compiler:
CC= gcc 该成 CC= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc
(根据你自己交叉编译器的位置修改)
# library (.a) file creation command
AR= ar rc 该成 AR= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-ar rc
(同上)
# second step in .a creation (use "touch" if not needed)
AR2= ranlib 该成 AR2= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabiranlib
(同上)
5 在/root/libjpeg-arm目录下建立 man/man1,include,lib,bin四个目录
6 # make
# make install
7 将/root/libjpeg-arm/include/中(jconfig.h, jerror.h, jmorecfg.h, jpeglib.h)四个头文件拷
贝到:/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include中。
将/root/libjpeg-arm/lib中(libjpeg.la, libjpeg.so, libjpeg.so.62, libjpeg.so.62.0.0)四个库
文件拷贝到:/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/lib中
注意:执行以下命令检查生成的libjpeg.so是否为ARM版:

# file libjpeg.so
以下为正确输出,否则检查交叉编译器路径以及Makefile并重新编译。
注意:执行完以上操作后执行以下命令检查库文件是否已正确安装:
# arm-linux-gcc -print-file-name=libjpeg.so
如果输出为"libjpeg.so"则说明没有正确安装,重复7步骤。
如果输出为"DIR/libjpeg.so"则说明安装正确。
至此libjpeg交叉编译完成。
二 交叉编译 x264,xvid,ffmpeg
为了使OpenCV能处理视频,我们要事先交叉编译ffmpeg,而ffmpeg又是依赖x264和
xvid的。
1 下载yasm:
到 http://www.tortall.net/projects/yasm/wiki/Download 下载yasm0.7.2(x264需要用
到的汇编编译器)
# ./configure --enable-shared --prefix=/root/arm-none-linux-gnueabi/arm-none-linuxgnueabi/
--host=arm-linux
# make
# make install
2 交叉编译x264
到 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 下载x264-snapshot-20060805-
2245.tar.bz2,解压进入目录
(1).配置
# ./configure --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/ --enableshared
(2).修改配置参数
修改config.mak:
prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
libdir=${exec_prefix}/lib
includedir=${prefix}/include
# 这里改为ARM
ARCH=ARM
SYS=LINUX
# 这里改为arm-linux-gcc
CC=arm-linux-gcc
# 这里去掉-DHAVE_MMXEXT -DHAVE_SSE2 -DARCH_X86
CFLAGS=-Wall -I. -O4 -ffast-math -D__X264__ -DHAVE_MALLOC_H -DSYS_LINUX
-DHAVE_PTHREAD -s -fomit-frame-pointer
LDFLAGS= -lm -lpthread -s
AS=nasm

ASFLAGS=-O2 -f elf
VFW=no
GTK=no
EXE=
VIS=no
HAVE_GETOPT_LONG=1
DEVNULL=/dev/null
CONFIGURE_ARGS= '--enable-shared' '--prefix=/root/arm-none-linux-gnueabi/armnone-
linux-gnueabi/'
SONAME=libx264.so.49
default: $(SONAME)
修改Makefile,将66~68行的ar和ranlib改为arm下的:
libx264.a: .depend $(OBJS) $(OBJASM)
arm-linux-ar rc libx264.a $(OBJS) $(OBJASM)
arm-linux-ranlib libx264.a
(3).编译安装
# make
# make install
这里可以在交叉编译链目录/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的
lib下生成libx264.so
3 交叉编译xvid
到 http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz 下载xvid
下载xvid解压并进入build/generic
配置
# ./configure --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/ --disableassembly
[解释]--disable-assembly :因为xvid没有针对ARM的汇编优化,所以编译时必须关掉汇
编
修改Makefile引用的platform.inc文件,将CC=gcc改为CC=arm-linux-gcc
# make
# make install
成功后进入example文件夹
测试,输入
arm-linux-gcc -o xvid_encraw xvid_encraw.c -lc -lm -I../src/ -L../build/generic/=build

-lxvidcore
即可生成xvid_encraw
这里可以在交叉编译链目录/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的
include,lib下生成相应的头文件和库文件
4 交叉编译ffmpeg
到http://download.chinaunix.net/download.php?id=5532&ResourceID=2990在这个网址
上下载ffmpeg-0.4.9-p20051120.tar.bz2,然后解压。
修改configure文件,要修改的如下
由于cc、ar、ranlib、strip都是交叉编译环境中的执行文件,可以这样配置
prefix="/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/"
cross_prefix="root/arm-none-linux-gnueabi/bin/arm-linux-"
cpu="arm"
配置
# ./configure --cpu=arm --cc=arm-linux-gcc --enable-shared --disable-ffserver --enablexvid
--enable-x264 --enable-gpl --enable-pthreads --disable-strip
# make
# make install
这里可以在交叉编译链目录/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的
include,lib下生成相应的头文件和库文件
至此,OpenCV所依赖的库都交叉编译完成,并在交叉编译链中的include,bin,share,lib下
有相应的文件
三 交叉编译OpenCV
下载OpenCV-1.0.0源码 http://www.opencv.org.cn/download/opencv-1.0.0.tar.gz
解压进入目录配置
# ./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --withoutquicktime
--without-1394libs --with-ffmpeg --without-python --without-swig --enable-static
--enable-shared --disable-apps CXX=arm-none-linux-gnueabi-g++ CPPFLAGS=-
I/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include LDFLAGS=-L/root/arm-

none-linux-gnueabi/arm-none-linux-gnueabi/lib --with-v4l --prefix=/root/opencv-arm
--libdir=/root/opencv-arm/lib --includedir=/root/opencv-arm/include
说明:
--host=arm-none-linux-gnueabi :指出交叉编译arm平台
--without-gtk:忽略gtk+2.0 windows
--without-carbon: 不使用Mac OS上的X库
--without-quicktime
--without-1394libs
--without-ffmpeg
--without-python
--without-swig
--enable-static :生成静态库
--enable-shared :生成动态库
CXX=arm-none-linux-gnueabi-g++ : 指定编译工具
CPPFLAGS=-I/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include :
OpenCV会用到一些dev的包,如png.h,jpeglib.h,大部分头文件在/usr/include下
--prefix=/root/opencv-arm :指定安装目录
-libdir=/root/opencv-arm/lib: 指定库文件安装位置
--includedir=/root/opencv-arm/include:指定包含文件安装位置
如果配置正确,会有下面信息
General configuration ================================================
Compiler: arm-none-linux-gnueabi-g++
CXXFLAGS: -Wall -fno-rtti -pipe -O3 -fomit-frame-pointer
Install path: /root/opencv-arm
HighGUI configuration ================================================
Windowing system --------------
Use Carbon / Mac OS X: no
Use gtk+ 2.x: no
Use gthread: no
Image I/O --------------------

Use libjpeg: yes

Use zlib: yes
Use libpng: yes
Use libtiff: no
Use libjasper: no
Use libIlmImf: no
Video I/O ---------------------
Use QuickTime / Mac OS X: no
Use xine: no
Use ffmpeg: yes
Use dc1394 & raw1394: no
Use v4l: yes
Use v4l2: yes
Wrappers for other languages =========================================
SWIG
Python no
Additional build settings ============================================
Build demo apps no
Now run make ...
===================================================================
===
# make
# make install
arm上运行OpenCV所需库:
1 将/root/opencv-arm/lib下生成的库文件
libcvaux.so.1.0.0
libcv.so.1.0.0
libcxcore.so.1.0.0
libhighgui.so.1.0.0
libml.so.1.0.0
拷出来全部重命名
*.so.1
2 加上之前的库文件,将/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/lib下的
libjpeg,xvid,x264,ffmpeg库都拷出来放去板子的/usr/lib或者/lib下,也可以复制到板子上一
个文件夹,然后#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/YOUR/lib/DIR
3 OpenCV所需库总表:


编译源文件方法
arm-none-linux-gnueabi-g++ demo.c -o demo -I/root/opencv-arm/include/opencv
-L/root/opencv-arm/lib -lcv -lcxcore -lpthread -lrt -lcvaux -lm -lpng -ljpeg -lz -lml -lhighgui
-ldl
最后,将生成的二进制文件拷到板子上就可运行

(详细使用指南)Linux下交叉编译带ffmpeg的opencv并移植到RK3588等ARM端 交叉编译是指在一台计算机上生成目标平台的可执行程序。通常情况下,我们在开发软件时会在同一平台上编译、运行程序,但有时候需要将程序部署到不同体系结构或操作系统的设备上运行,这就需要使用交叉编译工具链来生成适用于目标平台的可执行文件。常见的应用场景包括在开发嵌入式系统、移动应用程序或跨平台软件时进行交叉编译。 阅读详情

相关推荐

k最近邻算法——电影分类及案例详解

如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。

ZhShy 4553

ffmpeg 和 opencv 编译

ffmpeg 编译参数: ./configure --enable-gpl --disable-x86asm --enable-shared --enable-pic --enable-static

haima1998的专栏 1265

用Verilog手把手教你搭建一个5级流水线的MIPS CPU(附完整代码与仿真)

本文详细介绍了如何使用Verilog从零构建一个5级流水线的MIPS处理器,包括开发环境配置、核心模块实现、流水线冲突处理等关键技术。通过完整的代码示例和仿真方法,帮助读者掌握CPU设计的基本原理和实践技巧,特别适合想要入门处理器设计的工程师和学习者。

weixin_30613727的博客 461

opencv编译指定自定义的ffmpeg版本,cuda加速

opencv源码编译,videoio模块通常会使用ffmpeg库。通常我们在编译opencv源码前,会直接使用命令行安装ffmpeg库。如果需要使用cuda硬编解码器,需要再编译ffmpeg。

热爱生活,忠于自己 6902

01 底盘制动产品之轮速传感器

轮速传感器是用来测量汽车车轮转速的传感器。对于现代汽车而言,轮速信息是必不可少的,汽车动态控制系统(VDC)、汽车电子稳定程序(ESP)、防抱死制动系统(ABS)、自动变速器的控制系统等都需要轮速信息。

汽车软件工程师 | 好奇博主 | 处女座 4654

正版63棋牌源代码游戏+728游戏全套带前端源代码解析

这俩天抽时间仔细看了一下这套项目包含完整的前端、后端及后台管理系统。从上传的截图可以看出,前端基于资源目录,后端采用和,后台管理界面提供数据查询与管理功能。本篇文章将从前端结构、后端接口、数据库设计、常见 BUG 及优化方法等方面逐步拆解,并给出相应的代码示例和实践经验。

aa2031171的博客 3571

opencv和ffmpeg编译安装

在ubuntu16.04环境下安装ffmpeg和opencv。 1、安装ffmpeg (1) 编译 首先安装x264,在cv2中需要使用该编码器。 git clone git://git.videolan.org/x264.git cd x264 ./configure --enable-static --enable-shared sudo make sudo make instal......

root_clive的博客 5681

数学建模更新10(蒙特卡罗模拟)

蒙特卡罗模拟一.目录二.引例1:布丰投针实验1.投针步骤2.思路3. 历史实验者二.蒙特卡罗模拟概述1.定义2.提出3.原理4.讨论三.应用实例1.三门问题【1】问题【2】代码2.模拟排队问题【1】题目【2】引入参数【3】总结题目信息【4】过程可视化【5】一些推导公式【6】代码3.有约束的非线性规划问题【1】问题的分类【2】例子【3】推导过程【4】代码 一.目录 二.引例1:布丰投针实验 1.投针步骤 步骤: 1:取一张白纸,在上面画出许多条间距为a的平行线 2:去一根长度为l的针,随机的向纸张上投掷n次

沉晨尘宸的博客 3039

交叉编译 opencv ffmpeg (静态库)

交叉编译 opencv ffmpeg

weixin_45075999的博客 846

Halcon阈值算子 -- 局部阈值之dyn_threshold

Halcon阈值算子 – dyn_threshold HALCON有很多阈值算子,接下来将一一介绍。本文先介绍dyn_threshold。 以下介绍主要参考HALCON帮助文档,并加上自己的体会。如有纰漏,欢迎留言指出 理论介绍 dyn_threshold算子的函数签名如下: dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 输入参数有: OrigImage:待处理图像 ThresholdIm

m0_47015717的博客 5383

python——模拟砍价

类型:随机数。

m0_62488776的博客 1970

Installation steps for python-opencv

sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-nump

doublechenchenchen的博客 709

金现代面试题—— i++,++i, &&,&|自动装箱和自动拆箱(int,byte,float等)|取int等基本类型的最大值

public static void main(String[] args){ int i=1,j=1; if(i++==2&&++j==2){ i=7; } System.out.println(“i=”+i+”,j=”+j); } 请给出 输出结果:

老孟嘚吧嘚 1396

基于Hi3559A ARM64位嵌入式平台的OpenCV2.4.9+ffmpeg2.0.7移植及应用

前言:      按照上一篇文章的方式移植后发现可以正常操作图片文件,不能正常获取视频文件,后来发现是因为OpenCV中的视频API接口依赖于FFmpeg的支持,因此必须得移植合适版本的FFmpeg库,最新的不一定好,能用即可! 在嵌入式设备上做视频图像处理还是需要依赖强大的工具才行,虽然移植的过程比较痛苦,但是成功,后面的开发任务就轻松很多,事半功倍,可以将宝贵的时间放在更High-Leve

hue2550的博客 4066

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python opencv程序如何在arm上运行_OpenCV ffmpeg移植到ARM平台

前一篇写了如何在移植OpenCV库到ARM平台上,本来我只是用到OpenCV的打开USB摄像头获取图像到IplImage结构中,这用到了V4L2的底层函数。然后进行视频图像的帧处理。那么如何用OpenCV读写ARM板上的视频文件,并进行视频处理呢?这该又将如何移植呢?本文引用地址:http://www.eepw.com.cn/article/201611/317669.htm这个就必须要装x264...

weixin_33970994的博客 638

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ARM-LINUX交叉编译集合

一些软件和库的Arm-Linux交叉编译移植。

qq_41535901的博客 1449

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

基于Hi3559A ARM64位嵌入式平台的OpenCV2.4.9+ffmpeg2.0.7移植

原文:http://www.yanglajiao.com/article/hue2550/77881249 1、准备文件 ffmpeg-2.0.7.tar.bz2 opencv-2.4.9.zip 2、FFmpeg移植 1、解压 2、编译配置 ./configure --prefix=/home/bug1989/op...

jacke121的专栏 3459

OpenCV移植到ARM 全过程

我的环境 Host:VMware + Ubuntu 10.04 Target:Real6410 with Linux 2.6.38 Crossing Compiler:arm-linux-gcc 4.4.3  一  交叉编译链的安装 1    解压,即可得到 arm-none-linux-gnueabi 目录 # tar –xjvf arm-none-linux-gnueabi-4

jemofh159的专栏 2万+

OpenCV移植到ARM 全过程

转载地址:http://blog.csdn.net/jemofh159/article/details/7553747 我的环境 Host:VMware + Ubuntu 10.04 Target:Real6410 with Linux 2.6.38 Crossing Compiler:arm-linux-gcc 4.4.3  一  交叉编译链的安装 1    解压,即可得到 ar

xiaoxiannan的专栏 1172

Linux下编译与ARM下移植opencv1.0.0详细步骤

(由于最近需要在6410的板子上做人脸识别,于是就要安装与移植opencv了,安装过很多次,终于好用了,自己测试过。相关文件下载:点击打开链接) 1、          OpenCv库编译。首先将opencv-1.0.0.tar.gz拷贝到虚拟机/opt目录下,然后解压: tar zxvf opencv-1.0.0.tar.gz 2、进入到opencv-1.0.0目录中,输入命令,完成配置:

Hard work pays off !!! 1846

Linux aarch64-linux-gnu-交叉编译x264、ffmpeg、opencv并移植

Linux aarch64-linux-gnu-交叉编译x264、ffmpeg、opencv并移植

Yan_uuu的博客 3684

Ubuntu系统下交叉编译OpenCV(超详细版)

Ubuntu系统下交叉编译OpenCV(超详细版)

IT菜鸟 2521

移植opencv-2.4.6到tiny210v2

环境: ubuntu 交叉编译:arm-linux-gcc 参考: blog.csdn.net/top_dada/article/details/8183758 一、编译libz    下载:    www.zlib.net/    配置:    ./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueab

MyBlog of Embbnux 2271

persistence.cpp:2197:ann.xml(1): There should be space between attributes in function icvXMLParseTag

charVec size:101 OpenCV Error: Parsing error (/mnt/PRTest/resources/model/ann.xml(1): There should be space between attributes) in icvXMLParseTag, file /home/ds/build/opencv-3.1.0/modules/core/src/per

dengshuai_super的博客 6110

opencv交叉编译包含ffmpeg

使用opencv的api打开视频或者视频流,需要ffmpeg的支持(或者其他的方式,不太清楚),在交叉编译的时候需要ffmpeg的支持; 交叉编译opencv 编译ffmpeg

GeiGe123的博客 5483

在ubuntu10.04建立opencv交叉编译环境

一、环 境: 系统 :Ubuntu10.04(内核 2.6.32) 目标 板: FL2440(系统 :Qtopia2.2,内核:2.6.28) arm-linux-gcc:4.3.2 二、准备 : 安装依赖库:sudo apt-get install build-essential manpages-dev pkg-config 安装libpng: sudo apt-g...

mmdev 136
上一篇: OpenCV在ARM平台上的移植
下一篇: OpenCV1.0摄像机标定程序
河海壹粟
博客等级 码龄14年 19粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值