交叉编译opencv 3.4.9 虚拟机(Ubuntu18.04)到NanoPi Neo4

   日期:2020-06-04     浏览:148    评论:0    
核心提示:sudoapt-getupdatesudoapt-getinstallgitbuild-essentiallinux-libc-devsudoapt-getinstallcmakecmake-guisudoapt-getinstalllibusb-1.0-0-devlibusb-devlibudev-devsudoapt-getinstallmpi-default-devopenmpi-binopenmpi-commonsudoapt-getin

文章目录

    • 交叉编译的概念
    • 机器(交叉编译链)选择
    • opencv的交叉编译
    • QT交叉编译
    • 如何使用?
    • 总结

前言:我手里的pi性能太低了,安装PCL一编译磁盘就装满,在反复撞墙3次后,我终于接受了安装不了的事实。原来嵌入式开发中常用到交叉编译。我也来(硬着头皮)试试,deadline已经赶不上了,只能先装个死,然后继续配置环境。
但是配置pcl的时候,发现没有教程,本来想按照编译opencv的方式编译pcl结果遇到了一些依赖库已经安装但是cmake依然找不到库的情况,然后pcl就暂时搁置了,毕竟时间成本太高,这里只完成了配置opencv的部分。

交叉编译的概念

在机器A上编译出在机器B上运行的程序或者库,这个程序和库不能在A上运行。通常机器A的性能比机器B好很多。

机器(交叉编译链)选择

我在笔记本上装了虚拟机,安装Ubuntu18.04并且根据该Nano Pi 的操作手册安装了交叉编译链。

git clone https://github.com/friendlyarm/prebuilts.git -b master --depth 1
cd prebuilts/gcc-x64
cat toolchain-6.4-aarch64.tar.gz* | sudo tar xz -C /
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin:$PATH
export GCC_COLORS=auto
. ~/.bashrc

就完事了。
测试hello world
在虚拟机上编译好不能运行:

在NanoPi上运行:

opencv的交叉编译

安装依赖项

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

官网下载opencv源代码,并解压
在解压后的目录

mkdir build
cmake-gui //进入cmake界面

选择好source(解压目录)和build目录(mkdir的那个build),然后configure,选择交叉编译

根据自己的交叉编译链设置
比如我的交叉编译链安装在:/opt/FriendlyARM/toolchain/6.4-aarch64/bin,以下C、C++和targetRoot的设置就需要按照这个路径填写

finish,然后再search中搜索install, 选择自己希望安装得目录

然后再次configure并且generate,关闭cmake,然后make -j4, sudo make install 即可
在make的时候遇到错误undefined reference to `png_init_filter_functions_neon’参考解决
我是就遇到这一个问题,解决后一路通畅

设置opencv的环境变量

将OpenCV库添加到路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
末尾添加:/usr/local/lib保存退出
sudo ldconfig配置生效
配置bash,在bash.bashrc文件的末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 
export PKG_CONFIG_PATH

然后使设置生效:

source /etc/bash.bashrc

sudo updatedb

以上opencv交叉编译完成

QT交叉编译

QT交叉编译主要是为了QT creator上配置arm交叉编译环境。可以先按照一般的QT安装模式将QT安装好,然后参考:
编译QT的交叉编译库并给qtcreator设置编译器

如何使用?

假设QTcreator 的编译器选择好了(也就是上个部分),在.pro文件中设置好动态链接库的目录就可以了,和普通的opencv的使用是一样的。


INCLUDEPATH=/home/vera/lib_opencv_dir/include \
            /home/vera/lib_opencv_dir/include/opencv \
            /home/vera/lib_opencv_dir/include/opencv2

LIBS=/home/vera/lib_opencv_dir/lib/libopencv_calib3d.so \
     /home/vera/lib_opencv_dir/lib/libopencv_core.so    \
    /home/vera/lib_opencv_dir/lib/libopencv_highgui.so \
    /home/vera/lib_opencv_dir/lib/libopencv_imgproc.so \
    /home/vera/lib_opencv_dir/lib/libopencv_imgcodecs.so\
   /home/vera/lib_opencv_dir/lib/libopencv_objdetect.so\
     /home/vera/lib_opencv_dir/lib/libopencv_photo.so \
    /home/vera/lib_opencv_dir/lib/libopencv_dnn.so \
    /home/vera/lib_opencv_dir/lib/libopencv_shape.so\
    /home/vera/lib_opencv_dir/lib/libopencv_features2d.so \
   /home/vera/lib_opencv_dir/lib/libopencv_stitching.so \
    /home/vera/lib_opencv_dir/lib/libopencv_flann.so\
    /home/vera/lib_opencv_dir/lib/libopencv_videoio.so \
    /home/vera/lib_opencv_dir/lib/libopencv_video.so\
    /home/vera/lib_opencv_dir/lib/libopencv_videostab.so \
   /home/vera/lib_opencv_dir/lib/libopencv_ml.so

测试代码:

#include <iostream>
#include<opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>

using namespace std;
using namespace cv;

int main()
{
    Mat img_input;
    img_input =imread("dog.JPG");
    cout << "Hello World!" << endl;
    if(!img_input.empty())
    {
        cout<<"image input successed";
        Mat gray;
        cvtColor(img_input,gray,COLOR_RGB2GRAY);
        cout<<"image to gray"<<endl;
        Rect rect(0,0,100,200);
        Mat lgray=gray(rect);
        cout<<"cut gray"<<endl;
    }
   else
        cout<<"the image is empty";
    return 0;
}

唯一不同的点是,在虚拟机上没有办法运行,但是如果有错误的话会报错,没有错误的话,qt显示是这样的
在NeoPi上运行时,需要拷贝相应的动态链接库(如何版本一样的话就不需要拷贝了),输出为:

总结

需要在计算机上安装以及配置路径:

  1. 虚拟机,Ubuntu18.04
  2. 对应arm的交叉编译链
  3. 交叉编译opencv
  4. 交叉编译QT库

移植程序的时候,需要注意opencv版本的一致,如果不一致,将交叉编译出的opencv的动态链接库 copy过去,并且在/etc/ld.so.conf.d中添加一个.conf文件写入你copy过去的库的位置,保存(这样运行可执行程序就可以直接找到自己需要的链接库了)。

以上。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服