基于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  128

using 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 encode
        record.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.4

CC = aarch64-hisiv610-linux-g++
DIR = /home/ubuntu/share/tangqi_code/opencv/opencv_3559_2.4.9

TARGETS := VideoSample_3559

LIBS = 	-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/lib

CPPFLAGS = --static

all:$(TARGETS)

$(TARGETS):VideoSample.cpp
	$(CC) $(CPPFLAGS) $(INCLUDE) $^ $(LIB_TARGET_DIR) $(LIBS)  -o $@

clean:
	rm -f *.o $(TARGETS)

     其中Makefile中的DIR路径是第3步中编译好的OpenCV的安装路径


5、有时间再补充细节吧,主要是写给自己看的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值