页面标题
GitHub Gitee

OpenCV移植到海思Hi3516DV300开发板

1. 移植OpenCV库

  1. 在 ubuntu 上安装 cmake-gui: sudo apt-get install cmake-gui

  2. 下载 OpenCV 及 contrib 源代码

    https://github.com/opencv/opencv_contrib/archive/3.4.3.zip

    https://github.com/opencv/opencv/archive/3.4.3.zip

此处以 OpenCV3.4.3 与 OpenCV_contrib3.4.3 为例,然后解压

运行 cmake-gui,弹出如下界面,并输入源代码和 cmake build 出来的目录。

注意,第二个目录(build_hi3516D)是自己手动创建的。

点击”configure“,首先要选择交叉编译器平台,如下图所示。

Operating System 一栏写 “arm-himix200-linux-gcc”,C 与 C++ 两栏直接填编译器路径

不知道怎么找编译器路径?arm-himix200-linux-gcc -v 或者 which 命令会帮助你

点击 ”finish“ 后会 configure 一会直到成功。

选择 cmake_install_prefix:

install_hi3516D“ 也是自己创建的,路径可改。后面的 ”make install“ 会把编译好的 opencv 库文件拷贝到该目录下。

将 opencv_contrib 模块也编译进来,路径为你解压后 opencv_contrib 目录下的 modules 目录:

为防止后续源代码编译错误,还得加上下面配置:

CMAKE_EXE_LINKER_FLAGS :-lpthread -lrt -ldl

如果没有找到这一项,暂时先跳过这一步

保险起见,CMAKE_FIND_ROOT_PATH 下添加交叉编译器 root 目录:

注意:勾选 BUILD_opencv_world 以及 BUILD_zlib

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

配置完成后点击 generate 来生成可编译的 opencv 代码

如果之前跳过了 ”CMAKE_EXE_LINKER_FLAGS“ 步骤,

请手动在 build_hi3516D/CMakeCache.txt 下手动修改这一项为 -lpthread -lrt -ldl

进入 build_hi3516D 目录 敲入命令:

make -j8
make install

即可编译成功

然后,从 install_hi3516D/include 中将 opencvopencv2 两个文件夹复制到 smp/a7_linux/mpp/include 文件夹下

install_hi3516D/lib 中将所有库文件复制到 smp/a7_linux/mpp/lib 文件夹下

最后,修改 smp/a7_linux/mpp/sample 中的 Makefile.param

INC_FLAGS := -I$(REL_INC) -I$(REL_INC)/opencv/ -I$(REL_INC)/opencv2/
CFLAGS += -L $(REL_LIB) -lopencv_world -lrt -ldl

大功告成!

2. 测试移植后的OpenCV

创建如下程序:

#include <opencv2/opencv.hpp>  
#include <iostream>  
using namespace std;
using namespace cv;
int main(void) {  
    // 图片路径  
    string imagePath = "./color_image.jpg"; // 这里应该是你的彩色图像文件路径  
    // 使用cv::imread函数读取彩色图片  
    Mat colorImage = imread(imagePath, IMREAD_COLOR);  
    // 检查图片是否成功读取  
    if (colorImage.empty()) {  
        cerr << "Unable to load image!" << endl;  
        return -1;  
    }  
    // 创建一个Mat对象来存储灰度图像  
    Mat grayImage;  
    // 使用cv::cvtColor函数将彩色图像转换为灰度图像  
    cvtColor(colorImage, grayImage, cv::COLOR_BGR2GRAY);  
    // 输出灰度图像  
    imwrite("./gray_image.jpg", grayImage);   
    return 0;  
}

同文件夹 Makefile 如下:

# Hisilicon Hi35xx sample Makefile
include ../Makefile.param
SMP_SRCS := $(wildcard *.cpp)
TARGET := $(SMP_SRCS:%.cpp=%)
TARGET_PATH := $(PWD)
# compile linux or HuaweiLite
include $(PWD)/../$(ARM_ARCH)_$(OSTYPE).mak

以程序放在板端SD卡运行为例:

将可执行文件和之前生成的 libopencv_world.so 放在同一目录下,

首先挂载SD卡:mount -t vfat /dev/mmcblk0p1 /mnt

然后通过环境变量链接动态库:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt

运行结果如图:

posted @ 2025-03-02 00:59  Wintoki  阅读(187)  评论(0)    收藏  举报