栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

如何让Ubuntu上共存x86和arm版的opencv4

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何让Ubuntu上共存x86和arm版的opencv4

如何让Ubuntu上共存x86和arm版的opencv4

这个移植真的给我整冷了,想到以后可能整移植QT还要再次经历这个移植过程,我决定写下我的第一个博客,方便大家学习参考,也方便我以后查阅

这篇内容主要针对如何将x86和arm版本的opencv共同植入ubuntu中,由于作者也处于linux学习阶段,如有疏忽或更好方法,欢迎讨论~

目的:在ubuntu上编写opencv代码,可以g++编译直接在ubuntu上面测试,也可以arm交叉编译写到开发板上运行。

废话少说直接开始


首先要知道x86的opencv4库和arm的opencv4库并不完全一样,所以最好准备两个文件夹存放代码

可以看到我有两个文件夹分别存放arm版和x86版的opencv。

我这里用的是opencv4.4.0,最开始移植我用的4.5.5 arm版会有问题谨慎使用。


安装ubuntu依赖项

跑通ubuntu下opencv代码的同学跳过这步

这些都是Ubuntu的opencv4依赖项,

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv41-dev libxvidcore-dev libx264-dev libatlas-base-dev gfortran libgtk2.0-dev libjpeg-dev libpng-dev

若用Python则还需要安装

sudo apt-get install python2.7-dev python3.5-dev

编译x86下的opencv4

首先解压下载下来的安装包然后进入

新建build的文件夹然后进入,并输入

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local..

这里安装目录就选用/usr/local的默认目录就行了

然后开始安装

sudo make -j8
sudo make install

到这步没出现问题的话,那么开始代码测试

随便找个地方新建工程目录,再新建CMakeLists.txt(需要安装有cmake)、main.cpp

#CMakeLists.txt内容
cmake_minimum_required(VERSION 3.5)
#创建工程
project(OpencvTest)
#找自己版本的opencv
find_package(OpenCV 4.4.0 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(OpencvTest main.cpp)
target_link_libraries(OpencvTest ${OpenCV_LIBS})
#include 
#include 

using namespace cv;
using namespace std;

int main(int argc, const char** argv) 
{
    Mat img =Mat::zeros(1000,1000,CV_8UC1);
    imwrite("./test.jpg",img);
    return 0;
}

将两个文件写好后

OpenCV_DIR=/usr/local
cmake . 
make

OpenCV_DIR=/usr/local为什么要用这句等下说明

如果测试成功会在当前文件夹下生成一个纯黑色test.jpg的图片

x86的opencv库就结束啦,以后写代码参考这个流程就可以了


编译arm板的opencv4

先解压opencv4压缩包然后进入,新建build文件夹,进入build文件夹

这次解压的opencv4要和之前x86的是同一个压缩包!!

这样可以保证arm板和电脑的开发环境相同,避免因为版本不同造成的错误

arm板上要配置的cmake有点多,所以用cmake-gui来配置

cmake-gui ..

和x86一样安装表示顺序进行配置

1处选择解压的opencv4路径,2处选择刚新创建的build文件夹

然后下一步选择自己的交叉编译器,平时在arm板用什么编译器就选择什么的


选择对应build下的install文件夹(现在应该是不存在的,编译完自动生成)

勾选编译JPEG和PNG

选择Release

这里添加

-pthread -ldl -lrt

勾选PKGCONFIG,这个很有用

然后

就完成配置了,点右上角叉叉就行了

先不要急着输入 make。首先在源码3rdparty/protobuf/src/google/protobuf/stubs/common.
cc 这个文件下第 33 行添加#define HAVE_PTHREAD 宏定义才可以编译的过。具体原因是 HAVE_PTHREAD 宏定义了 pthread 库。在如下位置添加即可。

cd build/
make -j8
make install

完成编译

测试:

测试文档和上面x86的一样,在一个测试文件夹中添加CMakeLists.txt(需要安装有cmake)、main.cpp,内容和上述一样。

再添加文件arm_linux_setup.cmake

内容如下

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(tools /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf)
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

根据自己交叉编译器的位置和名称进行替换

现在大致是这个样子的

进行编译

export OpenCV_DIR=/home/book/tools/arm_opencv/opencv-4.4.0/build/install
cmake -DCMAKE_TOOLCHAIN_FILE=./arm_linux_setup.cmake .
make

有人可能会问为什么要设置export OpenCV_DIR,因为系统共存两个版本的opencv4.4.0,编译器并不知道你要用哪一套,如果用arm板的opencv库肯定无法在ubuntu上运行,反之也是,所以要告诉编译器你要用的库在哪里

这也是困扰我很久的问题,导致我反反复复尝试了许久,如果嫌麻烦可以写个shell脚本一套操作

运行成功


终于写完啦~ 好饿,第一次写博客,有不足的或者错误的地方欢迎指正,欢迎大家讨论留言~~,喜欢这篇文章的话点个再走吧

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/962823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号