嵌入式开发之移植OpenCv可执行程序到arm平台

0. 序言

  • PC操作系统:Ubuntu 16.04
  • OpenCv版本:4.0
  • 交叉工具链:arm-linux-gnueabihf,gcc version 5.4.0
  • 目标平台:arm
  • 编译时间:20181224
  • 建议新手先看交叉编译的这篇文章:https://www.jianshu.com/p/0fcdce428d8f

1. 下载C++版本Eclipse

下载地址:https://www.eclipse.org/downloads/packages/ 选择Linux 64位

2. 创建C++Project

步骤1:File-New-Project..-C++Project-Next-输入Project name-Next-输入Author-Next:


 

 

步骤2:默认Debug和Release:


 
步骤3:输入交叉编译命令的前缀和交叉编译所在的路径并点击Finish:
 

说明:这里看不懂的,建议先看交叉编译的文章:https://www.jianshu.com/p/0fcdce428d8f

目录结构:


 

3. 编写C++代码

  • 把Exam.cpp的代码替换为以下代码并保存:
复制代码
 1 #include<opencv2/core.hpp>
 2 #include<opencv2/imgcodecs.hpp>
 3 #include<opencv2/imgproc.hpp>
 4 using namespace cv;
 5 int main(void)
 6 {
 7     Mat pic;
 8     pic=imread("gaoyuanyuan.jpg");
 9     Mat gray;
10     cvtColor(pic,gray,COLOR_BGR2GRAY);
11     imwrite("gray.png",gray);
12     return 0;
13 }
复制代码
注意:这里一定要执行保存的操作。
 

4. 添加头文件的路径

右击项目Exam,选择Properties并设置如图选项,然后点击Apply And Closed。


 

说明:
① /usr/local/arm/opencv-arm/ 是交叉编译执行make install后存放可执行文件的目录,也就是CMAKE_INSTALL_PREFIX对应的目录
② /usr/local/arm/opencv-arm/include/opencv4/ 对应Exam.cpp的代码"#include<opencv2/core.hpp>"
,因为我的opencv4的下一级目录是opencv2,opencv2里面存放的是头文件。


 

5. 添加库依赖

右击项目Exam,选择Properties并设置如图选项,然后点击Apply And Closed。


 

 
注意:Libraries是手写的,它会自动拼接lib和so字符找到指定的依赖。而path则是上上个图展示的存放so文件的目录的路径。

6. 添加C++11新特性

Project->Properties->C/C++ Build->Settings->GCC G++ Compiler->Miscellaneous->Other flags 将-c -fmessage-length=0 改为 -c -fmessage-length=0 -std=c++11


image.png

7. 项目Clean然后Build

Clean 是为了防止你中途没有配置完Properties就Build项目:


 

说明:Building file是原始我们的cpp文件,Building target指的是编译cpp文件生成的可执行文件。

8. 导出可执行文件和so文件并执行

Exam可执行文件存放在生成的Debug目录下:


 

so文件就是我们刚刚指定的libraries依赖的path路径下的so文件:


 
  • 复制Exam可执行文件以及Exam.cpp程序所需的一张图片到arm平台的一个目录下,这里用到的图片名称为gaoyuanyuan.jpg
  • 复制so文件到arm平台的/lib文件夹下。
  • 进入Exam可执行文件和图片所在的目录,执行命令,就会生成一张gray.png图片:
  • ./Exam
    


    作者:付凯强
    链接:https://www.jianshu.com/p/f515357e1539
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    posted @   鲸小鱼-  阅读(2268)  评论(0编辑  收藏  举报
    编辑推荐:
    · 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
    · AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
    · 基于Microsoft.Extensions.AI核心库实现RAG应用
    · Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
    · 开发者必知的日志记录最佳实践
    阅读排行:
    · TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
    · Manus的开源复刻OpenManus初探
    · AI 智能体引爆开源社区「GitHub 热点速览」
    · C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
    · 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
    点击右上角即可分享
    微信分享提示