精华内容
下载资源
问答
  • RK1808交叉编译opencv with ffmpeg环境与源码包一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 环境与源码包 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也...


    环境与源码包

    宿主机:Ubuntu16.04 x86
    目标平台:RP-RK1808,aarch64
    交叉编译工具链:gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
    架构-操作系统-程序二进制接口约定
    aarch64-linux-gnu
    依赖关系:
    opencv(3.4.3)
    |--------zlib(1.2.11)
    |--------ffmpeg(4.2.1)
    |--------x264(20181217(0.161.x))
    |--------xvidcore(1.3.3)

    注意,网上部分教程说需要下载ffmpeg依赖项

    apt-get install libavcodec-dev libavformat-dev libswscale-dev
    

    但是交叉编译并不需要这个,并且这个可能会影响后面的交叉编译,使得看起来找到了ffmpeg依赖项,但是交叉编译之后无法使用。
    这是因为直接下载的依赖项是x86架构的,而目标平台是aarch64架构的。
    依赖项的查找依靠pkgconfig工具,依靠*.pc文件。
    而FFMPEG始终为NO的解决就依靠pkgconfig工具,具体见4.opencv交叉编译
    相关源码包以及交叉编译好的文件等有时间了再放链接吧。
    注意,本教程因为写的时候离编译较久,可能有许多错误之处,切勿全抄,思考着编译。


    以下是本篇文章正文内容。

    一、交叉编译是什么?

    简单来说,交叉编译就是在宿主机上编译可以在目标机上运行的代码。

    二、使用步骤

    1.交叉编译zlib

    前期准备

    sudo gedit /root/.bashrc
    export PATH=$PATH:/home/rpdzkj/cfan/Source/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin//指定交叉编译工具链目录
    export OPENCV_DEPEND=/usr/local/arm/opencv-depend
    export OPENCV_INSTALL=/usr/local/arm/opencv-install
    source /root/.bashrc//使生效
    aarch64+tab//测试,是否会自动补齐出aarch64-linux-gnu-gcc、g++等,补齐则生效
    

    //进入解压得到的zlib文件夹

    ./configure --prefix=$OPENCV_DEPEND//指定安装目录
    

    之后,对Makefile文件进行修改,修改内容如下:

    CC=aarch64-linux-gnu-gcc
    LDSHARED=aarch64-linux-gnu-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
    AR=aarch64-linux-gnu-ar
    RANLIB=aarch64-linux-gnu-ranlib
    

    最后

    make
    

    2.libx264的交叉编译

    cd /home/rpdzkj/lib/x264-master
    gedit config.mak
    CC=aarch64-linux-gnu-gcc
    LDSHARED=aarch64-linux-gnu-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
    AR=aarch64-linux-gnu-ar
    RANLIB=aarch64-linux-gnu-ranlib
    STRIP=aarch64-linux-gnu-strip
    make install
    

    报错libx264.a(bitstream-8.o): In function x264_8_bitstream_init': bitstream.c:(.text+0x19c): undefined reference tox264_8_nal_escape_neon’
    bitstream.c:(.text+0x1a0): undefined reference to `x264_8_nal_escape_neon’
    很多未定义,我去官网下载了源码包之后解决

    3.libxvid交叉编译

    cd /home/rpdzkj/lib/xvidcore-1.3.3
    cd ./build/generic
    ./configure --prefix=$OPENCV_DEPEND --host=aarch64-linux --disable-assembly
    

    按照教程来的话,这一步采用的编译工具就是gcc,,虽然说本质上aarch64-gcc就是gcc,但还是修改一下吧。

    CC=aarch64-linux-gnu-gcc ./configure --prefix=$OPENCV_DEPEND --host=aarch64-linux --disable-assembly
    

    加了CC,但是没用,还是gcc,算了接着往下走。如果有知道为什么的大佬麻烦请在评论区或者私信告诉下我为什么,不胜感激。

    make
    

    完成后看下文件格式

    file libxvidcore.so.4.3 
    ibxvidcore.so.4.3: ELF 64-bit LSB shared object, ARM aarch64,
    make install
    

    4.ffmpeg交叉编译

    cd /home/rpdzkj/lib/ffmpeg-4.2.1
    ./configure --prefix=$OPENCV_DEPEND --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=aarch64 --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=aarch64-linux-gnu-gcc --enable-swscale --extra-ldflags=-L$OPENCV_DEPEND/lib --extra-cflags=-I$OPENCV_DEPEND/include --pkg-config=PKGCONFIG --ar=aarch64-linux-gnu-ar --ranlib=aarch64-linux-gnu-ranlib
    make
    make install
    

    4.opencv交叉编译

    cd opencv-3.4.3
    mkdir build
    cd ./build
    gedit toolchain.cmake
    

    ###########user defined#############
    set( CMAKE_SYSTEM_NAME Linux )
    set( CMAKE_SYSTEM_PROCESSOR aarch64 )
    set( CMAKE_C_COMPILER aarch64-linux-gnu-gcc )
    set( CMAKE_CXX_COMPILER aarch64-linux-gnu-g++ )
    ###########user defined#############
    set( CMAKE_FIND_ROOT_PATH “/usr/local/arm/opencv-depend” )
    set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
    set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    ######################################
    保存文件后,执行如下命令:

    cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../
    

    其实上述toolchain文件并不一定要写,现在的cmake-gui已经有足够多的选项完成上述工作,不过我现在没时间再交叉编译一遍了。
    这里只有一个问题,交叉编译好的ffmpeg始终找不到。
    上述命令执行完会有提示

    openCV disables pkg-config to avoid using of host libraries. Consider using PKG_CONFIG_LIBDIR to specify target SYSROOT
    

    之前一直没注意到这句提示,真的困扰了我很久,不打开pkgconfig的话ffmpeg始终找不到。
    WITH_FFMPEG:判断是否引用ffmpeg,设为ON,在CmakeLists里,gui里也可以设置
    HAVE_FFMPEG:判断是否有ffmpeg,这个是重点

    pkgconfig设置

    if(UNIX) 
        if(NOT APPLE_FRAMEWORK OR OPENCV_ENABLE_PKG_CONFIG) 
            if(CMAKE_CROSSCOMPILING AND NOT DEFINED ENV{PKG_CONFIG_LIBDIR} AND NOT OPENCV_ENABLE_PKG_CONFIG ) 
                if(NOT PkgConfig_FOUND) 
                    message(STATUS "OpenCV disables pkg-config to avoid using of host libraries. Consider using PKG_CONFIG_LIBDIR to specify target SYSROOT")
                elseif(OPENCV_SKIP_PKG_CONFIG_WARNING) 
                    message(WARNING "pkg-config is enabled in cross-compilation mode without defining of PKG_CONFIG_LIBDIR environment variable. This may lead to misconfigured host-based dependencies.") 
                endif() 
                       elseif(OPENCV_DISABLE_PKG_CONFIG) if(PkgConfig_FOUND) 
                            message(WARNING "OPENCV_DISABLE_PKG_CONFIG flag has no effect") 
            endif() 
         else() find_package(PkgConfig QUIET) 
        endif() 
    endif()
    

    先尝试启动pkgconfig
    cmake-gui通过Add Entry按钮添加 OPENCV_ENABLE_PKG_CONFIG,选bool类型,打勾。
    显示

    Checking for modules 'libavcodec;libavformat;libavutil;libswscale'
      Found libavcodec, version 56.60.100
      Found libavformat, version 56.40.101
      Found libavutil, version 54.31.100
      Found libswscale, version 3.1.101
    Checking for module 'libavresample'
      No package 'libavresample' found
    WARNING: Can't build ffmpeg test code//重点,测试ffmpeg
    
    Video I/O:
        DC1394:                      NO
        FFMPEG:                      NO
          avcodec:                   YES (ver 56.60.100)
          avformat:                  YES (ver 56.40.101)
          avutil:                    YES (ver 54.31.100)
          swscale:                   YES (ver 3.1.101)
          avresample:                NO
        GStreamer:                   NO
        libv4l/libv4l2:              NO
        v4l/v4l2:                    linux/videodev2.h
        gPhoto2:                     NO
    

    但是找到的版本号不对,并且ffmpeg始终为NO,这是因为我一开始按网上教程所说下载了ffmpeg依赖项,但是其架构是x86,而我需要aarch64的。
    并且ffmpeg找到依赖项后会进行测试,就是因为测试不通过,所以ffmpeg始终为NO。

     --- FFMPEG ---
    ocv_clear_vars(HAVE_FFMPEG)
    if(WITH_FFMPEG)
      if(WIN32 AND NOT ARM)
      elseif(PKG_CONFIG_FOUND)
        ocv_check_modules(FFMPEG libavcodec libavformat libavutil libswscale)
        ocv_check_modules(FFMPEG_libavresample libavresample)
      else()
        message(STATUS "Can't find ffmpeg - 'pkg-config' utility is missing")
      endif()
    endif(WITH_FFMPEG)
    

    指定pkgconfig路径

    cp -r /usr/local/arm/opencv-depend/include/ /home/rpdzkj/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/include
    cp -r /usr/local/arm/opencv-depend/lib/ /home/rpdzkj/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/lib
    export PKG_CONFIG_PATH=/home/rpdzkj/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/lib/pkgconfig/
    

    最后显示

    Video I/O:
        DC1394:                      NO
        FFMPEG:                      YES
          avcodec:                   YES (ver 58.54.100)
          avformat:                  YES (ver 58.29.100)
          avutil:                    YES (ver 56.31.100)
          swscale:                   YES (ver 5.5.100)
          avresample:                NO
        GStreamer:                   NO
        libv4l/libv4l2:              NO
        v4l/v4l2:                    linux/videodev2.h
        gPhoto2:                     NO
    

    就可以正常交叉编译opencv了,剩下的可以看网上其他教程,好久之前编译的,现在记不住细节了。

    总结

    这个是好久之前完成的,拖了好久才开始写博客,好多细节都忘掉了,***可能有很多错误之处,大家交叉编译时不必照抄,更多是思考着进行交叉编译。***不然很容易扎进某个错误里,白白浪费很多精力。发现了错误之处希望大家在评论区指出共同探讨。
    参考文献
    ubuntu16.04交叉编译opencv 移植到rk1808上
    Ubuntu16.04交叉编译OpenCV并移植
    Ubuntu上交叉编译opencv及opencv_contrib并移植到ARM板之一
    交叉编译opencv时候ffmpeg选项始终为no的解决方法
    虚拟机交叉编译openCV详细步骤及bug解决详解

    展开全文
  • 环境+工具: 编译器 : aarch64-linux-gnu-g++ aarch64-linux-gnu-gcc 虚拟机 :ubuntu16.04 ...将源码opencv3.4.3 拷贝到此目录下,并新建两个opencv_config, opencv-arm-install文件夹, cm...

    环境+工具:

     

    编译器 : aarch64-linux-gnu-g++ aarch64-linux-gnu-gcc

    虚拟机 :ubuntu16.04

    cmake-gui

     

    cd /usr/local

    sudo mkdir opencv

    将源码opencv3.4.3 拷贝到此目录下,并新建两个opencv_config, opencv-arm-install文件夹,

     

    cmake-gui

     

     

     

    点击configure

    Next 如下图填写,compilers,c ,c++选项填写自己要用的交叉编译工具链。Target Root为检查编译工具链所在的路径,根据你的填写,Finish

     

    选择你要安装的路径;我这里是安装在刚刚新建的opencv-arm-install下。以防止将之前在ubuntu下的opencv冲掉,这里我只改了这一个选项,网上有人将动态链接库的选项也去掉了,但是我生成静态链接库执行demo出现问题,所以又选回来了,生成动态链接库,反正这里我只改了这一个地方。

    然后点击configure,Generate。

    进入opencv_config文件夹下,

    执行

    make

    make install

    完成。

     

    中间make的时候我遇到过两个问题:

    1.在进度到40%多的时候 opencv-3.4.3/3rdparty/libpng/pngstruct.h:30:18: fatal error: zlib.h: No such file or directory

    解决方法

    在 opencv-3.4.3/CMakeLists.txt,在514行增加以上代码: ocv_include_directories(./3rdparty/zlib/)下面一行添加,其它类似错误一样的解决方法

    ......

    ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})

    ocv_include_directories(./3rdparty/zlib/)

    ......

    重新cmake一遍,然后在进行make

     

    2.

    [ 43%] Building CXX object apps/visualisation/CMakeFiles/opencv_visualisation.dir/opencv_visualisation.cpp.obj

    [ 43%] Linking CXX executable ../../bin/opencv_annotation

    ../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_destroy'

    ../../lib/libopencv_imgcodecs.so: undefined reference to `pthread_create'

    ../../lib/libopencv_core.so: undefined reference to `pthread_key_create'

    ../..lib/libopencv_imgcodecs.so: undefined reference to `png_init_filter_functions_neon'

    ../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'

    ../../lib/libopencv_core.so: undefined reference to `dlopen'

    ../../lib/libopencv_core.so: undefined reference to `pthread_mutex_trylock'

    ../../lib/libopencv_core.so: undefined reference to `pthread_key_delete'

    ../../lib/libopencv_core.so: undefined reference to `dlclose'

    ../../lib/libopencv_core.so: undefined reference to `dlsym'

    ../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_settype'

    ../../lib/libopencv_imgcodecs.so: undefined reference to `pthread_join'

    ../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'

    ../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_init'

    collect2: error: ld returned 1 exit status

     

    解决方法:

    如下修改:~/opencv-3.4.3/3rdparty/libpng/pngpriv.h文件。

    将128行注释掉,添加129行内容。

    128 /*# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \*/

    129 # if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

    解决了这两个问题之后就make通过了

     

    之后将编译完成的lib include文件夹拷贝到开发板上,网上说拷贝到开发板的/usr/local,但是我拷贝到这个文件夹下执行demo的时候会出现error while loading shared libraries: libopencv_highgui.so.3.4: cannot open shared object file: No such file or directory这个错误,后将lib文件里的.so文件拷贝到lib64文件夹下demo可正常执行。

     

    编译一个调用摄像头并且录像的demo:

    #include <opencv2/core.hpp>

    #include <opencv2/imgcodecs.hpp>

    #include <opencv2/highgui.hpp>

    #include <opencv2/imgproc.hpp>

    #include <iostream>

     

    using namespace cv;

    using namespace std;

     

    int main()

    {

    VideoCapture capture(6);//如果是笔记本,0打开的是自带的摄像头,1 打开外接的相机

    capture.set(3,640);

    capture.set(4,480);

     

    Mat img;

    VideoWriter vw; //新建一个多媒体文件

    int fps = capture.get(CAP_PROP_FPS); //获取摄像头的帧率

     

    if (fps <= 0)fps = 16;

     

    //设置视频的格式

    // vw.open("Video.avi", VideoWriter::fourcc('h', '2', '6', '4'), fps, Size(640, 480));

    vw.open("1.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, Size(640, 480));

    if (!capture.isOpened()) //判断摄像头是否打开

    {

    cout << "open video faild";

    getchar();

    }

     

    cout << "open video success" << endl;

     

    if (!vw.isOpened()) //判断视频文件是否创建

     

    {

     

    cout << "open vw faild" << endl;

     

    }

     

    cout << "open vw success" << endl;

     

    while (1)

     

    {

     

    capture.read(img); //读取视频帧

     

    if (img.empty())

    break;

    vw.write(img); //将视频帧写入文件

     

    }

    return 0;

     

    }

     

     

    将lib和include文件拷贝到交叉编译的lib和include的文件夹下。并执行以下命令。

    aarch64-linux-gnu-g++ camera.cpp -o camera -I/usr/local/opencv/opencv-arm/include -L/usr/local/opencv/opencv-arm/lib -lopencv_highgui -lopencv_core -lopencv_imgproc -lpthread -lrt -ldl -lopencv_imgcodecs -lopencv_videoio

     

    会出现以下警告:

    /usr/local/linaro-aarch64-2017.11-gcc7.2/bin/…/lib/gcc/aarch64-linux-gnu/7.2.1/…/…/…/…/aarch64-linux-gnu/bin/ld: warning: …/…/lib/libopencv_imgproc.so, needed by /home/zy/cv22_1.0_rc/cv22_auto_linux_sdk/ambarella/prebuild/third-party/armv8-a/opencv24/usr/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)

    /usr/local/linaro-aarch64-2017.11-gcc7.2/bin/…/lib/gcc/aarch64-linux-gnu/7.2.1/…/…/…/…/aarch64-linux-gnu/bin/ld: warning: …/…/lib/libopencv_core.so, needed by /home/zy/cv22_1.0_rc/cv22_auto_linux_sdk/ambarella/prebuild/third-party/armv8-a/opencv24/usr/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)

    这个警告不影响目标代码的生成,但想去掉的话,其实只需要把找不到的库放到路径为/usr/local/arm/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib/目录下即可。

     

     

     

    展开全文
  • 主要讲解怎样在Linux上安装OpenCV交叉编译环境,本文举例是在Redhat上进行的,同时也在Ubuntu下进行过安装,如果有问题可以留言共同学习!
  • 交叉编译ARM版本的OpenCV3.4.9和QT5.12.2

    Ubuntu18.04交叉编译OpenCV3.4.9和QT5.12.2至ARM64位平台firefly-RK3399 (一)

    前言:交叉编译的OpenCV自带的GUI在ARM开发板上由于GTK的支持问题很难用自身的GUI显示界面,故配合交叉编译QT用于界面的设计和GUI显示,参考了一些微博,做记录及回顾之用,也能让后人少走些弯路,全程都亲测可行。

    一、环境介绍

    Host :PC端ubuntu18.04 64位
    Target:ARM64开发板 firefly-RK3399 lubuntu18.04 64位
    OpenCV版本:3.4.9
    QT版本:5.12.2

    二、PC端交叉编译OpenCV3.4.9

    1.OpenCV源码下载

    在这里插入图片描述
    下载链接:传送门
    可以根据自身需要选择相应的版本,笔者这里选择的是3.4.9版本。下载完解压至任意目录,笔者这里选择的是Ubuntu的下载文件夹。

    2.aarch64-linux-交叉编译器下载

    友善之臂的aarch64-linux-交叉编译器下载链接(关注我即可无需积分下载):传送门
    也可以自己用apt-get在Ubuntu下直接安装。
    下载完成后解压至任意目录。
    添加交叉编译器到系统环境变量:用Vim打开/etc/profile或者/root/.bashrc或者/etc/bash.barhrc在最后一行添加:export PATH = $PATH:/usr/local/arm/······/bin(刚才解压的目录)。然后重启或者source刚才编辑的文件。
    测试环境变量是否添加成功:输入:echo $PATH,看输出信息里面是否有刚才配置的路径,有的话继续在任意目录下输入aarch64-linux-gnu-g++ -v,若有版本信息及具体目录信息则说明安装成功。

    3.安装CMake

    终端下直接运行cmake-gui,若显示Command not found,那就执行以下的命令安装cmake。

    sudo apt-get install cmake
    sudo apt  install cmake-qt-gui
    sudo apt-get install libgtk2.0-dev
    sudo apt-get install pkg-config
    

    后二者是交叉编译OpenCV所需相关依赖,有的话可以不用装。
    安装完成后再次运行cmake-gui出现如下画面即说明安装成功。
    在这里插入图片描述

    4.配置CMake交叉编译OpenCV

    在这里插入图片描述
    在CMake的GUI中找到刚才解压OpenCV3.4.9的文件夹,作为源码目录,ARM版本的OpenCV3.4.9会生成在如图所示的build文件夹中,选择完毕后点击Configure.
    在这里插入图片描述在这里插入图片描述如图所示选择aarch64-gnu.toolchain.cmake作为交叉编译的工具链进行配置,这里注意如果在打开cmake-gui未用root权限打开可能会出错,一定要先进入root账户再打开cmake-gui进行如上的操作,加载配置之后应该会出现如下画面。
    在这里插入图片描述根据需要选择需要支持的选项,部分可能需要额外的依赖支持,如果想在开发板上正常使用则还需要交叉编译对应的依赖库,点击generate等待生成,完成后进入OpenCV的源码文件夹下的build文件夹中看看是否生成了Makefile文件,若已经生成则可以进行下一步的编译安装了。
    在build文件夹下运行make -j4 && make install,耐心等待即可完成编译和安装。此时build文件中的install文件夹就是我们交叉编译出来的ARM64版本的OpenCV3.4.9.

    三.RK3399开发板上的部署

    1. 打包拷贝:将上一步得到的install文件夹打包成tar或者tar.gz再拷贝到RK3399开发板的任意目录下,若不打包则拷贝时会提示某些文件无法复制过去,这里选择开发板中的/opt作为它的解压目录,/opt也是一般默认的软件包的安装位置,便于后续的环境变量的配置及日后的维护和查找。
    2. 添加动态库加载路径:运行Vim /etc/ld.so.conf.d/opencv.conf,会提示该文件不存在将新建一个新的conf文件,在打开的conf第一行里写上自己第一步解压的opencv的lib地址,如
    /home/firefly/wangrui/opencv/lib
    

    vim中输入:wq指令保存并退出,随后运行sudo ldconfig激活生效。
    3. 环境变量配置:先将解压的opencv文件中位于/lib/pkgconfig下的opencv.pc进行修改:

    # Package Information for pkg-config
    
    prefix=/home/wangrui/下载/opencv-3.4.9/build/install
    exec_prefix=${prefix}
    libdir=${exec_prefix}/lib
    includedir_old=${prefix}/include/opencv
    includedir_new=${prefix}/include
    
    Name: OpenCV
    Description: Open Source Computer Vision Library
    Version: 3.4.9
    Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_videoio -lopencv_imgcodecs -lopencv_features2d -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
    Libs.private: -ldl -lm -lpthread -lrt
    Cflags: -I${includedir_old} -I${includedir_new}
    

    将prefix修改为自己开发板上对应的opencv文件夹的路径如

    prefix=/home/firefly/wangrui/opencv
    

    修改完成后保存退出,运行Vim /etc/bash.bashrc 在最后一行添加如下:

     PKG_CONFIG_PATH=/home/firefly/wangrui/opencv/lib/pkgconfig:$PKG_CONFIG_PATH
     export PKG_CONFIG_PATH
    

    注意将路径替换成自己对应的pkgconfig路径, vim中输入:wq指令保存并退出,随后运行source ~/.bashrc激活生效。
    运行如下指令若出现如下路径输出则说明pkg配置成功。

    (base) root@wr:~# pkg-config --libs --cflags opencv
    -I/home/wangrui/opencv3.4.9/install/include/opencv -I/home/wangrui/opencv3.4.9/install/include -L/home/wangrui/opencv3.4.9/install/lib -lopencv_dnn -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_videoio -lopencv_imgcodecs -lopencv_features2d -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
    
    

    四.实例交叉编译及运行

    1.PC端交叉编译可执行程序

    我们可以在opencv-3.4.9/samples/cpp中OpenCV自带的示例程序中选择任意一个进行交叉编译,如下所示:

    (base) root@wr:~/下载/opencv-3.4.9/samples/cpp/example_cmake# ls
    CMakeLists.txt  example.cpp  Makefile
    (base) root@wr:~/下载/opencv-3.4.9/samples/cpp/example_cmake# aarch64-linux-g++ example.cpp -I /home/wangrui/下载/opencv-3.4.9/build/install/include/ -L /home/wangrui/下载/opencv-3.4.9/build/install/lib/ -lopencv_calib3d -lopencv_objdetect -lopencv_core -lopencv_photo -lopencv_dnn -lopencv_shape -lopencv_features2d  -lopencv_stitching -lopencv_flann -lopencv_superres -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs  -lopencv_video -lopencv_imgproc -lopencv_videostab -lopencv_ml
    
    

    其中aarch64-linux-g++就是第二步中所安装的交叉编译器,若第二步未配置成功,则运行这一步时会提示找不到该命令,上述命令运行完毕后会在当前文件夹下生成一个名为example的可执行文件,这里的-I与-L后面要替换成PC端上对应的opencv的文件夹路径才能正常编译。

    2.开发板交叉编译可执行程序

    若第五步的开发板上的pkg配置没有问题,则也可以选择将example.cpp拷贝到开发板上然后运行如下指令在开发板上实现编译产生开发板上直接可以运行的可执行文件:

     root@firefly:/home/firefly/wangrui/opencv# arm-linux-g++ -o example example.cpp `pkg-config --cflags --libs opencv`
    

    随后会在opencv文件夹中生成一个名为example的可执行文件,opencv自带的这个exmaple是一个调用摄像头并显示,所以需要用到GUI但是开发板的gtk并不支持,在Bash里./example运行时会出现类似如下的错误提示:

    OpenCV Error: Unspecified error (The function is not implemented. 
    Rebuild the library with Windows, GTK+ 2.x or Carbon support.
     If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, 
     then re-run cmake or configure script) in cvNamedWindow, file 
     /home/firefly/wangrui/opencv/modules/highgui/src/window.cpp, line 501 
       terminate called after throwing an instance of ‘cv::Exception’
    

    这并不代表opencv不可用,可以写一些简单的代码去测试一下opencv无关gui的函数是否可以正常运行,比如创建一个MAT对象并对它进行一些opencv的函数操作,如裁剪、放缩等,然后将结果保存出来进行查看,下面放一个简单的例子供测试opencv核心函数是否可以在RK3399开发板上正常运行:

    #include <stdio.h>
    #include <opencv2/opencv.hpp>
    using namespace cv;
    int main(int argc, char** argv )
    {
        Mat src = Mat::zeros(12,12, CV_8UC3);
        Rect rect(src.cols/4, src.rows/4, src.cols/2, src.rows/2);
        src=src(rect);
        imwrite("test.jpg", src);
        printf("创建成功! \n");
        waitKey(0);
        return 0;
    }
    

    运行完之后可以查看该程序的同路径文件夹下是否生成了test.jpg,将其打开查看是否正常创建了MAT对象以及执行了裁剪的功能,若测试成功,则说明opencv的交叉编译已经完成,现在只需要再对QT进行交叉编译,利用QT作为图形界面显示窗口去进行相关gui功能的实现,QT的交叉编译将在下一篇博客中详细介绍。

    展开全文
  • rk1108交叉编译opencv-3.4.6过程记录 ubuntu16.04 x64系统,搭建好rk1108开发板的交叉编译环境,并设置交叉编译器环境变量。 下载压opencv-3.4.6.zip压缩包并解压,下载链接: ...
    1. ubuntu16.04 x64系统,搭建好rk1108开发板的交叉编译环境,并设置交叉编译器环境变量。
    2. 下载压opencv-3.4.6.zip压缩包并解压,下载链接: https://github.com/opencv/opencv/releases/tag/3.4.6
    3. unzip opencv-3.4.6.zip
      cd opencv-3.4.6
      mkdir build
      cmake-gui
      使用cmake-gui进行设置,步骤如下,如下图1所示,选择生成Makefile的类型:
      在这里插入图片描述
      图1
      如下图2所示,配置交叉编译器的路径,图中Operating System请务必填写Linux,设置完毕后,单击finish,结束编译器配置过程,出现图3所示界面。
      在这里插入图片描述
      图2
      在这里插入图片描述
      图3
      依照以下图4,5,6,7片所示,进行配置项设置:
      在这里插入图片描述
      图4
      在这里插入图片描述
      图5 (安装路径设置,建议修改一下安装路径,参考上图5)
      在这里插入图片描述
      图6
      在这里插入图片描述
      图7
      按照上述步骤,完成配置
    4. 编译opencv:make -j4
      编译过程会出现如下error:
      在这里插入图片描述
      图8
      解决方式如下:
      vim ${HOME}/opencv-3.4.6/3rdparty/libpng/pngpriv.h
      注释掉一行:
      /*# if (defined(ARM_NEON) || defined(__ARM_NEON)) && \ */
      并添加一行:
      #if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) &&
      修改完成后,继续执行:make -j4 知道编译完成。
    5. 安装opencv: sudo make install,安装完成后,可在安装路径看到如下库函数:
      在这里插入图片描述
      图9

    注:之前交叉编译完成后,使用opencv时,总会报如下的警告:
    warning: …/…/lib/libopencv_imgproc.so, needed by …/lib/libopencv_imgcodecs.so, not found (try using -rpath or -rpath-link)
    使用命令查看:readelf -d libopencv_imgproc.so | grep NEEDED

    0x00000001 (NEEDED) 共享库:[…/…/lib/libopencv_core.so]
    0x00000001 (NEEDED) 共享库:[libstdc++.so.6]
    0x00000001 (NEEDED) 共享库:[libm.so.0]
    0x00000001 (NEEDED) 共享库:[libgcc_s.so.1]
    0x00000001 (NEEDED) 共享库:[libc.so.0]

    尝试了多种编译方式,最终得以解决,具体解决办法:
    需要保证在开始设置的时候 CMAKE_SYSTEM_NAME 是否被设置为Linux 若你的工程中未设置或设置为其它值,建议修改其为 Linux,即图2进行设置的时候,Operating System请务必填写Linux,设置后,完成编译。
    使用命令查看: readelf -d libopencv_imgproc.so

    Dynamic section at offset 0x310478 contains 33 entries:
    Tag Type Name/Value
    0x00000001 (NEEDED) Shared library: [libopencv_core.so.3.4]
    0x00000001 (NEEDED) Shared library: [libdl.so.1]
    0x00000001 (NEEDED) Shared library: [libpthread.so.1]
    0x00000001 (NEEDED) Shared library: [librt.so.1]
    0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
    0x00000001 (NEEDED) Shared library: [libm.so.1]
    0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
    0x00000001 (NEEDED) Shared library: [libc.so.1]
    发现…/…/lib路径没有了,直接依赖当前文件夹下的文件。

    交叉编译opencv时常用到,在此记录,给自己做个参考!

    展开全文
  • ubuntu交叉编译opencv

    千次阅读 2021-10-18 14:20:08
    1.首先在ubuntu上安装RV1126的交叉编译工具链 方法见RV1109_RV1126 EVB开发板环境搭建及使用总结中的步骤4. 2.下载opencv源码并解压 去Releases - OpenCV下载源码,我这里使用的3.4.12版本。 3.
  • 一、环境介绍 ...目标开发板: RK3399 二、相关源码包下载地址 OpenCV源码下载地址:https://opencv.org/releases/ 选择3.4.9版本下载。 aarch64-linux-交叉编译器下载地址:https://download.csdn.net...
  • 交叉编译opencv

    2016-05-24 17:16:48
    宿主机:linux mint 17.2 Cinnamon 64-bit(Cinanamon 2.6.13)  linux内核:3.16.0-18-generic  cmake version 2.8.12.2  opencv 2.4.10 #sudo apt-get install gcc-arm-linux-gnueabi
  • Ubuntu16.04交叉编译openCV 1、准备工作 与目标板配套的交叉编译工具并添加环境变量; openCV的源码,我这里的版本是3.2.0 交叉编译openCV需要的第三方库; 2、交叉编译安装第三方库 在安装第三方库之前,单独建立...
  • Ubuntu18.04交叉编译OpenCV3.4.9和QT5.12.2至ARM64位平台firefly-RK3399 (三) 前言:上两篇博客中我们将openCV和qt5.12.2分别交叉编译并将其部署至RK3399开发板上,并分别验证了二者在开发板上都可以顺利运行,接...
  • Ubuntu18.04交叉编译OpenCV3.4.9和QT5.12.2至ARM64位平台firefly-RK3399 (二) 前言:上一篇博客里介绍了如何交叉编译opencv并将其部署至RK3399开发板上,但由于GTK的问题导致opencv无法使用gui,这篇博客就将介绍...
  • 之前在3399pro开发板上编译opencv4.5.1的源码,将编译后的文件导出,在新的开发板上进行移植安装,本文记录了移植安装过程中出现的问题及解决方法。 1、环境配置 在移植安装之前配置新板子的开发环境,参考博客...
  • 使用的交叉编译工具是: 下载的 opencv4.1.2 2.移植过程 2.1 cmake 打开,输入地址。 config 第一次config 后面再勾选WIth_gtk_2_x 第二次config 切换到 build 目录下 ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 123
精华内容 49
关键字:

rk1808交叉编译opencv