• 海思3519A上移植OpenCV3.x


    环境安装与准备

    下载opencv3.4.1.
    或者
    下载opencv3.2.0.

    进入到opencv所在的目录新建目录build,install

    安装cmake:

    apt-get install cmake-qt-gui
    

    安装gtk等:

    apt-get install libgtk2.0-dev pkg-config
    

    配置和生成

    启动cmake:

    cmake-gui
    

    没有安装的话,根据提示进行安装即可,安装完成后进行配置:
    Configur
    上图:

    Operation System --- arm-himix200-linux-gcc
    gcc ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
    g++  ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++
    

    点击Configure之后,设置安装路径,我的设置为:

    配置CMAKE_EXE_LINKER_FLAGS:-lpthread -lrt -ldl

    点击generate

    修改出错的地方

    修改1

    出现错误:

    Error 1 make[1]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] Error 2 make: *** [all] 
    Error 2 #### make failed to build some targets (1 seconds) ####
    

    解决办法时找到3rdparty/protobuf/src/google/protobuf/common.cc文件,添加宏定义#define HAVE_PTHREAD:

    修改2

    如果上面配置了CMAKE_EXE_LINKER_FLAGS,就不会出现这个错误。
    若没有配置出现错误:

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

    解决办法时找到build目录下的CMakeCache.txt文件,在原文中修改:

    CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt -ldl
    

    如图:

    修改3

    找不到zlib.h
    这个版本的OpenCV已经包含了第三方的库3rdparty,
    在CMAKE中加入:

    修改4

    CMAKE 中取消:WITH_GTK

    编译和安装

    编译

    make -j16
    

    安装

    待编译完成之后,执行安装:

    make install
    

    安装之后在设置的路径下出现:

    文件直达

    测试

    /install/lib/目录下所有的lib文件拷贝到板载系统的/lib`目录下;
    我是在qt中使用opencv,提前已经编译好了可以在海思3519A上执行的qt,测试部分代码如下:

    void cvTest()
    {
        Mat img = imread("lena.jpg");
    
        Mat grad_x;
        Sobel(img, grad_x, CV_16S, 1, 0);
        Mat grad_y;
        Sobel(img, grad_y, CV_16S, 0, 1);
    
        Mat gradImage = abs(grad_x) + abs(grad_y);
    
        double minGrad, maxGrad;
        minMaxLoc(gradImage, &minGrad, &maxGrad);
        Mat gradImage_8U;
        gradImage.convertTo(gradImage_8U, CV_8U, 255./maxGrad);
    
        Mat thresholdedImage;//阈值化后的二值图
        threshold(gradImage_8U, thresholdedImage, 20, 255, THRESH_BINARY_INV);
    
        imwrite("gradImage_8U.jpg",gradImage_8U);
        imwrite("thresholdedImage.jpg",thresholdedImage);
    
    }
    

    将生成的可执行文件拷贝到板载系统上,并运行:
    测试结果如下:

    这里需要注意到是:
    由于编译的时候无法加入WITH_GTK选项,因而在板卡上执行的程序无法使用函数imshow

    完整的测试程序下载

    Ref

  • 相关阅读:
    Linux操作系统学习之第三篇
    Linux操作系统学习之第二篇
    简介VMware workstaion
    Linux操作系统学习之起始篇
    c# 与java对应的 aes加密(带向量的)
    string转DateTime
    webapi项目创建
    c# mqtt 服务端、客户端简易例子
    vs快捷键
    c# 用byte数组生成图片
  • 原文地址:https://www.cnblogs.com/chay/p/10384942.html
Copyright © 2020-2023  润新知