zoukankan      html  css  js  c++  java
  • 海思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

  • 相关阅读:
    【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)
    【LeetCode】抽样 sampling(共4题)
    【LeetCode】拓扑排序 topological-sort(共5题)
    【LeetCode】几何学 geometry(共2题)
    【读书笔记】C/C++程序员面试秘籍
    【读书笔记】程序员面试笔记
    【sql】牛客网练习题 (共 61 题)
    HDU 6119 小小粉丝度度熊 双指针
    2017多校第7场 HDU 6128 Inverse of sum 推公式或者二次剩余
    2017多校第7场 HDU 6121 Build a tree K叉树,思维
  • 原文地址:https://www.cnblogs.com/chay/p/10384942.html
Copyright © 2011-2022 走看看