当前位置: 首页 > article >正文

aarch64-opencv341交叉编译,并在arm上部署helloopencv

背景

当需要在jetson xavier nx或者rk 3562等平台上开发关于视觉检测的工程时,由于arm板子资源不足或者不能联网等原因,通常在虚拟机上利用交叉编译器编译得到可执行程序,然后部署到arm板上。

aarch64-opencv341交叉编译

ubuntu虚拟机中先安装cmake,以及cmake-gui

sudo apt-get update
sudo apt-get install cmake
sudo apt-get install cmake-gui

进入gui界面,选择源码地址和build地址

cmake-gui

点下configure按钮,弹出对话框中选择交叉编译工具链,然后选择Opencv源码中platform中的交叉编译工具
在这里插入图片描述
在这里插入图片描述
然后一轮configure后会有报错,可以将关于CUDA、python等的关联去掉,否则可能会报缺少cuda相关库

在这里插入图片描述
opencv_world勾选上,输出一个.so库文件
在这里插入图片描述
除此之外,就是配置好install路径
configure和generate完成后,在终端窗口中cd到opencv-build目录下,分别执行make和make install完成编译和安装

make
make install

将install路径下的include、bin、lib等拷贝到/usr/local/, 并修改文件夹名字为opencv-3.4.1

cp -r install/ /usr/local
mv install opencv-3.4.1

helloOpencv demo验证

写一个helloOpencv.cpp文件和CMakelists.txt来测试

// helloOpencv.cpp
#include <iostream>
#include <opencv2/opencv.hpp>

int main() {
    // 创建一个名为 "Hello OpenCV" 的窗口
//    cv::namedWindow("Hello OpenCV", cv::WINDOW_AUTOSIZE);

    // 加载图片(确保图片路径正确)
    cv::Mat image;
    image = cv::imread("1.bmp", 0); // Read the file

    if(!image.data) {
       std::cout <<  "Could not open or find the image" << std::endl ;
       return -1;
    }
    std::cout <<  "read image ok" << std::endl;
    // 显示图片
    //cv::imshow("Hello OpenCV", image);

    // 等待用户按键,再退出
   // cv::waitKey(0);

    return 0;
}
# CMakelists.txt
cmake_minimum_required(VERSION 3.10)

project(HelloOpencv)

set(CMAKE_C_COMPILER   "/usr/bin/aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++")
#set(CMAKE_CXX_STANDARD 14)

set(OPENCV_DIR /usr/local/opencv-3.4.1)
include_directories(${OPENCV_DIR}/include)

add_executable(HelloOpencv helloOpencv.cpp )
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_LIST_DIR})

target_link_libraries(HelloOpencv 
         ${OPENCV_DIR}/lib/libopencv_world.so
        )

新建一个build路径,编译上述源代码

mkdir build
cd build 
cmake ..
make 
make install

由此,得到可执行文件HelloOpencv,使用网线将虚拟机和开发平台连接,利用ssh将文件和.so的opencv库拷贝过去,值得注意的是:.so的库压缩成.tar.gz之后发送到开发板上,直接发送文件会丢失文件的软链接,导致无法运行

# 发送文件
scp HelloOpencv root@板子的ip:/板子上的路径
scp opencv341.tar.gz root@板子的ip:/usr/lib

# ssh登录开发板,在/usr/lib中解压库文件
ssh root@板子的ip
cd /usr/lib
tar -xzvf opencv341.tar.gz
cd /放置执行文件的路径
./HelloOpencv

完成测试


http://www.kler.cn/a/372365.html

相关文章:

  • win11永久修改pdf默认打开方式
  • 在Windows上读写Linux磁盘镜像的一种方法
  • Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量转PDF文件
  • Python大数据可视化:基于python大数据的电脑硬件推荐系统_flask+Hadoop+spider
  • 嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别
  • 基于STM32的智能家居环境监控系统设计
  • 【灯光数据最新整理】 2000至2023年“NPP-VIIRS“夜间灯光数据(500m分辨率)-最新出炉_附下载链接
  • HCIP--以太网交换安全(总实验)
  • ssm基于web的网络游戏交易平台信息管理系统的设计与实现+vue
  • Linux_02 Linux常用软件——vi、vim
  • 从0开始深度学习(22)——从全连接层到卷积
  • 【牛客算法】某司面试算法题:循环右移二叉树
  • 2024 CCF CSP-J/S 2024 第二轮认证 真题试卷
  • ubuntu下快捷键启动程序
  • Kotlin学习第三课
  • WPF入门_07模板控件
  • 2. STM32 HAL库MDK工程模板创建
  • JavaFx -- chapter05(多用户服务器)
  • C++ 模板专题 - 标签分派(Tag Dispatching)
  • Spring Boot与Web技术的酒店客房服务管理系统
  • 深入理解C++ Lambda表达式:语法、用法与原理及其包装器的使用
  • 智能进化:强化学习如何模拟自然选择,揭示适应性优化的秘密
  • 利用kimi编程助手从0到1开始搭建小程序!
  • 贷中额度策略调整
  • 智能网关有什么用处
  • Ubuntu系统安装软件