当前位置:   article > 正文

【Linux驱动开发】OpenCV移植到ARM开发板全过程记录_如何将opencv程序烧录进linux开发版

如何将opencv程序烧录进linux开发版

opencv官网

一、下载opencv库源码

1、创建存放库的文件夹

mkdir ~/linux/mylib&&cd ~/linux/mylib
  • 1

2、下载

wget https://codeload.github.com/opencv/opencv/tar.gz/3.4.1 -O opencv-3.4.1.tar.gz
  • 1

3、解压&&进入解压后的文件夹

tar -xvf opencv-3.4.1.tar.gz&&cd opencv-3.4.1/
  • 1

二、配置opencv参数

1、安装 cmake 和 cmake-gui 工具

sudo apt-get install cmake cmake-qt-gui cmake-curses-gui
  • 1

2、创建编译和安装目录

mkdir build install&&cd build
  • 1

3、打开图形化工具 cmake-gui

cmake-gui
  • 1

(1)指定源码的路径和构造目录
在这里插入图片描述

在这里插入图片描述

(2)配置CMake参数
在这里插入图片描述

(3)填写交叉编译器的路径,Finish
在这里插入图片描述

(4)Cmake配置完成
在这里插入图片描述
build 文件夹生成文件:
在这里插入图片描述

(5)配置要编译的库、信息,指定依赖库的链接参数
搜索 CMAKE_EXE_LINKER_FLAGS ,添加上 -lpthread -lrt -ldl
在这里插入图片描述

(6)指定安装目录到新建的 install 目录
搜索CMAKE_INSTALL_PREFIX, /usr/local 改为 /home/pjw/linux/mylib/opencv-3.4.1/install
在这里插入图片描述

(7)改为正式版,优化速度
搜索CMAKE_BUILD_TYPE,将这个键的值改成Release
在这里插入图片描述

(8)生成 Makefile 等文件
点击 Configure,再点击 Generate 就可以生成。
在这里插入图片描述


三、修改文件

因为 HAVE_PTHREAD 宏定义了 pthread 库。所以要添加宏定义才可以编译得过。

cd .. //返回opencv顶层目录
vim 3rdparty/protobuf/src/google/protobuf/stubs/common.cc
  • 1
  • 2
#define HAVE_PTHREAD
  • 1

在这里插入图片描述


四、编译和安装

//进入build文件夹编译
cd build/&&make -j16

//把库安装到创建的 install 目录&&查看安装目录 install
make install&&ls install/
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
在这里插入图片描述


五、配置pkg-config环境变量

vim ~/.bashrc 
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:~/linux/mylib/opencv-3.4.1/install/lib/pkgconfig
source ~/.bashrc
//查看路径
pkg-config --libs --cflags opencv
//输出
-I/home/pjw/linux/mylib/opencv-3.4.1/install/include/opencv -I/home/pjw/linux/mylib/opencv-3.4.1/install/include -L/home/pjw/linux/mylib/opencv-3.4.1/install/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

六、测试程序编写与编译

编写:cv_test.cpp

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
 
int main(){
    cv::Mat image = cv::imread("picture.png");
    cv::namedWindow("picture");
    cv::imshow("picture",image);
    cv::waitKey(5000);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

编译:

arm-linux-gnueabihf-g++ -o cv_test cv_test.cpp `pkg-config --cflags --libs opencv`
  • 1

查看生成的可执行文件属性,为ARM架构:
在这里插入图片描述


七、开发板上测试

1、参照文章在开发板根文件下挂载目录:

NFS服务开启与使用、目录挂载与卸载


2、把OpenCV的 install/lib 下的所有库,拷贝到文件系统下的 /lib 目录下。

//拷贝opencv的lib文件夹到nfs目录
cp -r ~/linux/mylib/opencv-3.4.1/install/lib ~/linux/nfs
  • 1
  • 2

开发板终端查看:
在这里插入图片描述

//进入nfs挂载目录下的lib文件夹
cd ~/mountnfs/lib/
//拷贝所有文件到开发板 `lib`cp * /lib/
  • 1
  • 2
  • 3
  • 4

可以看到,全部拷贝过来了。
在这里插入图片描述

3、把测试app拷贝过来:

cp -r ~/linux/project/opencvApp/cv_test ~/linux/nfs
  • 1

4、执行测试app

./cv_test
  • 1

报错:

OpenCV(3.4.1) Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /home/pjw/linux/mylib/opencv-3.4.1/modules/highgui/src/window.cpp, line 618
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(3.4.1) /home/pjw/linux/mylib/opencv-3.4.1/modules/highgui/src/window.cpp:618: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvNamedWindow
Aborted
  • 1
  • 2
  • 3
  • 4

这是因为没有GTK,跑不了UI,而代码中使用了opencv的窗口创建和显示函数,所以报错,就是以下2句代码:

cv::namedWindow("picture");  
cv::imshow("picture",image);
  • 1
  • 2




参考 【正点原子】I.MX6U 移植OpenCV V1.2、OpenCV移植到ARM全过程-III

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号