opencv2.4.6.1+ffmpeg移植arm6410

2024-01-25 16:08

本文主要是介绍opencv2.4.6.1+ffmpeg移植arm6410,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一次移植好的opencv没有ffmpeg,导致无法处理视频,经过几天的调试,总算弄好了。

1.检测你的opencv是否已经包含ffmpeg。这个很简单,用ldd命令查看可执行程序用了哪些动态库就知道了。如果没有检测到与ffmpeg相关的库,那说明opencv没配置完全,下面是详细配置过程。

 

2.交叉编译ffmpeg时先得交叉编译x264和xvid

2.1交叉编译xvid

到http://packman.links2linux.de/package/xvidcore下载xvid,我的下载版本为xvidcore-1.3.2

解压,cd进入xvid下的build/generic目录,执行以下命令:

./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --host=arm-linux  --disable-assembly

make

make install

        注意在make install时要root权限。安装目录为:/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi 自 己调整,但尽量放这里。

2.2交叉编译x264

到http://download.videolan.org/pub/videolan/x264/snapshots/下载x264,我下载的版本为x264-snapshot-20131113-2245-stable,解压,cd进入解压目录。执行以下命令:

CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi

make

make install

2.3交叉编译ffmpeg

ffmpeg两个依赖库已经编译好了,而且放在/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi目录下.

首先去http://ffmpeg.org/download.html下载ffmpeg,我下载的版本为FFmpeg 2.02  "Nameless",解压,cd进入解压目录,执行以下命令:

./configure --enable-cross-compile --target-os=linux --cc=arm-linux-gcc --arch=arm --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --enable-libx264 --enable-libxvid                                         --extra-cflags=-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include                                           --extra-ldflags=-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib                                 --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/

make

make install

       注意上面的--extra-flags和--extra-ldflags,这两个路径指向你安装xvid和x264的路径。

到此,ffmpeg已经安装好了,你可以在/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi路径下的include和lib找到相关的文件, 在bin下面有ffmpeg和x264的可执行文件,用file命令查看其是否为arm的执行文件.

2.4将编译好的ffmpeg加入pkg-config

    为什么要加入pkg-config?因为2.0版以后的opencv都是用cmake来生成 makefile文件,opencv通过调用pkg-config来查找相关依赖库,而默认的pkg-config在/usr下,我们安装的目录又不在/usr下,所以不加入pkg-config的话opencv是找不到ffmpeg的!!!

        执行命令:

        sudo gedit /etc/bash.bashrc

        在打开的文档最后加入:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/pkgconfig

export PKG_CONFIG_PATH

保存推出,重启电脑使其生效,可用命令查看当前pkg-config:pkg-config --list-all

应该有刚安装好的一些东西吧?

 

3.交叉编译opencv

      上次我是用cmake-gui生成的makefile,但我很无语的发现这样找不到ffmpeg,那就只能参考官方的文档了:

http://docs.opencv.org/doc/tutorials/introduction/crosscompilation/arm_crosscompile_with_cmake.html#arm-linux-cross-compile

它用cmake调用opencv-2.4.6.1下的CMakeLists.txt和opencv-2.4.6.1/platforms/linux/arm-gnueabi.toolchain.cmake来生成makefile,但是arm-gnueabi.toolchain.cmake要修改,打开它,把它所有东西删掉,写入以下几句:

set( CMAKE_SYSTEM_NAME Linux )

set( CMAKE_SYSTEM_PROCESSOR arm )

set( CMAKE_C_COMPILER arm-linux-gcc )

set( CMAKE_CXX_COMPILER arm-linux-g++ )

保存,退出。

      然后在opencv-2.4.6.1下建立一个build目录,cd进入该目录,执行一下命令:

cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ../

等待一会,你会发现控制台里输出了很多信息,有什么头文件找不到,但都无关要紧,你只需查看一下信息:

--   Video I/O:

--     DC1394 1.x:                  NO

--     DC1394 2.x:                  NO

--     FFMPEG:                      YES

--       codec:                     YES (ver 55.18.102)

--       format:                    YES (ver 55.12.100)

--       util:                      YES (ver 52.38.100)

--       swscale:                   YES (ver 2.3.100)

--       gentoo-style:              YES

如果出现了,那么恭喜你,成功就在眼前了。用cmake-gui打开CMakeCache.txt,把一些无关要紧的都去掉,不然会出错的,最后我只剩以下这些打勾:

opencv2.4.6.1+ffmpeg移植arm6410
opencv2.4.6.1+ffmpeg移植arm6410
opencv2.4.6.1+ffmpeg移植arm6410
opencv2.4.6.1+ffmpeg移植arm6410
opencv2.4.6.1+ffmpeg移植arm6410
点击Configure和Generate,生成最后的makefile文件。

注意:如果你不想安装在当前build/install下,可以在CMAKE_INSTALL_PREFIX修改,如/usr/local/arm_opencv

ok,最后就是长久的等待了:

make

如果make没出错,那就成了,如果出错,自己慢慢找吧!

最后

make install

      这个安装很蛋疼,反正我是出了各种各样的问题,出了问题分析一下,google or baidu,然后删除build重新安装,要相信自己总会成功滴!!!

这篇关于opencv2.4.6.1+ffmpeg移植arm6410的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/643807

相关文章

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

ffmpeg面向对象-待定

1.常用对象 rtsp拉流第一步都是avformat_open_input,其入参可以看下怎么用: AVFormatContext *fmt_ctx = NULL;result = avformat_open_input(&fmt_ctx, input_filename, NULL, NULL); 其中fmt_ctx 如何分配内存的?如下 int avformat_open_input(

FFmpeg系列-视频解码后保存帧图片为ppm

在正常开发中遇到花屏时怎么处理呢?可以把解码后的数据直接保存成帧图片保存起来,然后直接看图片有没有花屏来排除是否是显示的问题,如果花屏,则代表显示无问题,如果图片中没有花屏,则可以往显示的方向去排查了。 void saveFrame(AVFrame* pFrame, int width, int height, int iFrame){FILE *pFile;char szFilename[

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本  1.2 认识Nano版本 2 STM32F446U上移植RT-Thread  2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet  2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码  2.2.3.

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询; 一、首先启动相关服务: 二、新建一个film索引: 三、建立映射: 1、通过Head插件: POST http://192.168.1.111:9200/film/_mapping/dongzuo/ {"properties": {"title": {"type":

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or