易百纳海思3516,编译opencv3.4.3

最近有群里小伙伴在问,能否在海思3516上面跑opencv,趁周末有空,试了一下.

  1. 需要有个海思的开发环境。sdk,这个买板子的时候应该都有了。

  2. 在ubuntu下面, 用apt安装一个cmake-gui, 是个cmake的编辑工具,如果提示你有两个版本, 你装那个cmake3的版本就行。

  3. 下载opencv3.4.3的源码,以及opencv_contrib3.4.3, 地址是:
    https://github.com/opencv/opencv_contrib/archive/3.4.3.zip
    https://github.com/opencv/opencv/archive/3.4.3.zip
    祝你有个好梯子。

  4. 解压,在opencv源文件目录下, 建两个子目录, 一个build ,一个install, 在命令行运行cmake-gui
    在这里插入图片描述

先把source code目录,指向opencv的源码文件夹, 把build, 指向上面说的新建的build目录.

  1. 点configure, 弹出的选项中, 一定要选择
    Specify options for cross-compiling

  2. 接着选择交叉编译器的安装目录
    在这里插入图片描述
    Operating System 填 arm-himix200-linux-gcc
    编译器就分别填海思的gcc跟g++
    如果你不知道这两个东西的安装位置,使用 which arm-himix200-linux-gcc查一下就知道了
    target root就指向编译器的bin目录

  3. Finish之后, 在主界面, 点几次Configure, 会报一些警告, 这个没问题, 勾选一下搜索栏的Advanced, 然后再Search搜索栏, 搜索一个配置
    CMAKE_INSTALL_PREFIX
    找到之后, 指向你的源码的install目录
    在这里插入图片描述
    类似这样

  4. 继续搜索配置CMAKE_CXX_FLAG_DEBUG与CMAKE_CXX_FLAG, 填入
    -lpthread -lrt -dl
    在这里插入图片描述
    参考上面的图片, 注意这个图片里面填入的有误, -dl,不是-dll

  5. 搜索BUILD_opencv_world, 打勾enable

  6. 搜索zlib, 将ZLIB的include指向源码的第三方源码的文件位置
    在这里插入图片描述

  7. 搜索opencv_world, 如下图,打上勾

在这里插入图片描述

  1. 搜索OPENCV_EXTRA_MODULES_PATH, 指向opencv_contrib-3.4.3/modules目录
    在这里插入图片描述

  2. 用ide打开opencv源码的3rdparty/protobuf/src/google/protobuf/stubs/common.cc文件
    在一堆#include的下面, 加入
    #define HAVE_PTHREAD
    避免编译的时候报找不到pthread错误

  3. 点了Configure之后, 在命令行cd到build目录, 用
    make -j4
    make install
    进行编译跟link
    就会在install下面生成需要的库
    在这里插入图片描述

  4. 随便找个地方,新建一个测试用的文件

#include <stdlib.h>
#include <iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

void cvTest()
{
    Mat img = imread("me.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);

}

int main()
{
    cvTest();
    return 0;
}

me.jpg就是你要处理的jpg文件名.

使用下面编译命令进行编译

arm-himix200-linux-g++ main.cpp -fPIC -lrt -D_GNU_SOURCE -lpthread -lm -ldl -lopencv_world -I '/home/marc/opencv/opencv-3.4.1/install/include' -L '/home/marc/opencv/opencv-3.4.1/install/lib'

修改一下include跟lib的位置到你的install目录对应位置

  1. 没啥问题的话就编译好了, 可以放到板子上跑起来了, 具体效果就是由一个图片, 转成阈值化后的二值图
    在这里插入图片描述
    右边是原图, 左边是在板子上跑起来的结果.

参考博文:
https://blog.csdn.net/Somnr_m/article/details/114655589

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值