基于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/opencv/ffmpeg_install --cross-prefix= aarch64-hisiv610-linux- --enable-cross-compile --arch=arm64 --target-os=linux --cc= aarch64-hisiv610-linux- gcc
此处会有一个警告,说xxx-pkg-xxx找不到,无视即可,不要被下着了,是warning不是error!
3、make
4、make install
5、在prefix中寻找你想要的
3、OpenCV移植
1、解压
2、添加之前移植安装完成的FFmpeg库的pkgconfig信息
export PKG_CONFIG_LIBDIR=/home/bug1989/opencv/ffmpeg_install/lib/
export PKG_CONFIG_PATH=/home/bug1989/opencv/ffmpeg_install/lib/pkgconfig/
3、解压后的根路径下运行cmake-gui,配置信息如下,注意“Linux”大写,“Target include”选择only,配置opencv源码路径,配置build路径,
点击configuration由于不支持CUDA配置报错,手动删除CUDA选项,删除OpenCL相关,删除V4L2相关,禁用动态库,禁用测试用例,设置make install的
安装路径,根据实际需求微调各种选项^_^!,确保ffmpeg的配置选项开启后点击generation,
4、进入build文件夹
make
make install
5、在prefix中寻找你想要的
4、测试用例
VideoSample.cpp
#include <opencv2/opencv.hpp>
#include <iostream>#include <stdio.h>
#include <sys/time.h>
#include <ctype.h>#define _MAX_FNAME 128using namespace cv;
using namespace std;static unsigned long get_current_time(void)
{struct timeval tv;gettimeofday(&tv, NULL);return (tv.tv_sec*1000000 + tv.tv_usec);
}int main()
{int frmCnt = 0;int time_0,time_1;int width, height;double dt;VideoCapture capture("a.mkv");width = (int)capture.get(CV_CAP_PROP_FRAME_WIDTH);height = (int)capture.get(CV_CAP_PROP_FRAME_HEIGHT);printf("Video size:%d %d\n", width, height);cv::VideoWriter record;record.open("record.avi", CV_FOURCC('X','V','I','D'), capture.get(CV_CAP_PROP_FPS), Size(534, 300));time_0 = get_current_time();while(1){Mat frame, dispImg;capture >> frame;if(frame.empty()){break; }/* Resize */cv::resize(frame, dispImg, cv::Size(534,300));/* Save with picture */imwrite("resize.jpg", dispImg);/* Save with video */char text[_MAX_FNAME] = {'\0'};sprintf(text, "FrmCnt: %d", frmCnt);cv::putText(dispImg, string(text), Point(5,15), FONT_HERSHEY_COMPLEX_SMALL, 1, CV_RGB(255,0,0));cv::rectangle(dispImg, cvPoint(100, 100), cvPoint(150, 150), cvScalar(0, 255, 255), 1, 4, 0 ); frmCnt++;//save frame and encoderecord.write(dispImg);if(frmCnt == 50){break;}}time_1 = get_current_time();dt = (time_1 - time_0)/1000000.0;printf("video end, frmCnt = %d, Consuming time %.3f s, %.1f FPS\n", \frmCnt, dt, frmCnt/dt);return 0;
}
Makefile
#This makefile is used to opencv 2.4CC = aarch64-hisiv610-linux-g++
DIR = /home/ubuntu/share/tangqi_code/opencv/opencv_3559_2.4.9TARGETS := VideoSample_3559LIBS = -lopencv_highgui \-lopencv_imgproc \-lopencv_core \-lopencv_video \-ldl \-lIlmImf \-llibjasper \-llibjpeg \-llibpng \-llibtiff \-lzlib \-lavformat \-lavcodec \-lavdevice \-lavfilter \-lavutil \-lswscale \-lpthread \INCLUDE = -I$(DIR)/include/LIB_TARGET_DIR = -L$(DIR)/lib \
-L/$(DIR)/share/OpenCV/3rdparty/libCPPFLAGS = --staticall:$(TARGETS)$(TARGETS):VideoSample.cpp$(CC) $(CPPFLAGS) $(INCLUDE) $^ $(LIB_TARGET_DIR) $(LIBS) -o $@clean:rm -f *.o $(TARGETS)
其中Makefile中的DIR路径是第3步中编译好的OpenCV的安装路径
5、有时间再补充细节吧,主要是写给自己看的
基于Hi3559A ARM64位嵌入式平台的OpenCV2.4.9+ffmpeg2.0.7移植相关推荐
- 基于Hi3559A ARM64位嵌入式平台的OpenCV2.4.9+ffmpeg2.0.7移植及应用
前言: 按照上一篇文章的方式移植后发现可以正常操作图片文件,不能正常获取视频文件,后来发现是因为OpenCV中的视频API接口依赖于FFmpeg的支持,因此必须得移植合适版本的FFmpeg库,最新的不 ...
- linux嵌入式开发arm7,基于ARM7系列芯片嵌入式平台上实现的设计方案-嵌入式系统-与非网...
本文介绍的方法是在用ARM7系列芯片S3C4510B和μClinux构建的嵌入式平台上实现的.在嵌入式系统设计过程中,系统的掉电保护越来越受到重视整个掉电保护实现的基本思路是:产生掉电信号,捕捉掉电信 ...
- linux26内核,基于AT91RM9200与LINUX2.6.26内核的嵌入式平台开发全过程
一.ARM9+LINUX开发历程 使用了51系列和MOTOROLA单片机若干年,觉得自己已经跟不上嵌入式发展的时代了.决定开发一种新的硬件平台,综合比较了一下,觉得ARM9+LINUX模式不错.先从头 ...
- 基于AT91RM9200与LINUX2.6.26内核的嵌入式平台开发全过程
一.ARM9+LINUX开发历程 使用了51系列和MOTOROLA单片机若干年,觉得自己已经跟不上嵌入式发展的时代了.决定开发一种新的硬件平台,综合比较了一下,觉得ARM9+LINUX模式不错.先从头 ...
- 转载:基于AT91RM9200与LINUX2.6.26内核的嵌入式平台开发全过程
一.ARM9+LINUX开发历程 使用了51系列和MOTOROLA单片机若干年,觉得自己已经跟不上嵌入式发展的时代了.决定开发一种新的硬件平台,综合比较了一下,觉得ARM9+LINUX模式不错.先从头 ...
- 【新技术发布】基于深度神经网络的激光雷达物体识别系统及其嵌入式平台部署
[新技术发布]基于深度神经网络的激光雷达物体识别系统及其嵌入式平台部署 激光雷达可以完成三维空间的测量,具有抗干扰能力强.信息丰富等优点,但受限于数据量大.不规则等难点,基于深度神经网络的激光雷达物体 ...
- 嵌入式arm linux产品,基于ARM——Linux的嵌入式产品平台构建
摘要: 随着计算机技术的发展,嵌入式系统已成为计算机领域一个重要组成部分,并成为近年来新兴的研究热点.ARM7TDMI是一种高效,低功耗的RISC处理器,以该内核为核心的 LPC2210 是一款基于以 ...
- 嵌入式linux编码器,基于嵌入式平台的视频编码器的实现-嵌入式系统-与非网
引言 H.264是由ISO(国际标准化组织)/IEC(国际电工协会)和ITU(国际电信标准化部门)合作制定的新一代视频编码标准,目前正处于应用开发阶段.与以往的视频编码标准相比,h.264具有更高的压 ...
- 深度学习自学(二十二):人脸检测人脸识别-嵌入式平台方案汇总
整理的人脸系列学习经验:包括人脸检测.人脸关键点检测.人脸优选.人脸对齐.人脸特征提取等过程总结,有需要的可以参考,仅供学习,请勿盗用.https://blog.csdn.net/TheDayIn_C ...
最新文章
- hadoop系统 hdfs 命令行操作
- antd 表单提交,文件和表单内容一起提交,表单校验
- 4个计算机视觉领域用作迁移学习的模型
- hihoCoder week3 KMP算法
- STM32系统滴答定时器(systick)应用
- Leetcode题库 5.最长回文子串(C++实现)
- java时间api_什么是java时间API?
- Asp.NET中如何一次性下载多个文件
- 项目管理(4):备战pmp
- bootstrap弹出的模态框水平垂直居中的实现
- 逆向工程mysql注释_PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释...
- 凸优化第六章逼近与拟合 6.4 鲁棒逼近
- spring5.0学习笔记9
- lamp+cacti+ntop+thold+nagios+syslog
- 基于SSM的宠物医院信息管理系统javaweb毕业设计项目源码论文
- 中压变频器行业现状调研及趋势分析报告
- 20220326-代码日记-Unity画符
- 文华软件怎样测试交易系统的收益,文华财经交易系统之终极黄金
- const char*, char const*, char*const的区别
- Intent传递Bitmap
热门文章
- android 开发--获取文件的扩展名和去掉文件的扩展名
- android webview 63版,Issue in WebView Android History When update Chrome stable version 63
- 计算机专业大一暑假,2020年计算机专业大学生暑期社会实践调查报告
- SQL How to get the current day month and year
- codeforces654题解_CodeForces - 886C 解题思路
- linux sa 命令,Linux 常用命令全拼
- php播放ppt代码,PHP+JavaScript幻灯片代码
- 宝塔如何备份网站_学习织梦网站必需会的一件事:织梦网站数据备份
- oracle 行级死锁_ORACLE死锁的分类
- python线性整数规划求解_实例详解:用Python解决整数规划问题!