嵌入式开发之移植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的代码替换为以下代码并保存:
#include<opencv2/core.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/imgproc.hpp>
using namespace cv;
int main(void)
{
Mat pic;
pic=imread("gaoyuanyuan.jpg");
Mat gray;
cvtColor(pic,gray,COLOR_BGR2GRAY);
imwrite("gray.png",gray);
return ;
}
注意:这里一定要执行保存的操作。

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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
嵌入式开发之移植OpenCv可执行程序到arm平台的更多相关文章
- 移植strace调试工具到arm平台
strace工具是一个非常强大的工具,是调试程序的好工具.要移植到arm平台,就需要使用交叉编译工具编译生成静态链接的可执行文件.具体步骤如下:1.下载 strace-4.5.16 移植str ...
- (嵌入式开发)移植最新uboot
一:准备移植 1.从下面的官网下载最新的U-boot.用google英文版搜索最新的u-boot源码 ftp://ftp.denx.de/pub/u-boot/ 2.建立sourceinsight工 ...
- 移植mysql到嵌入式ARM平台
移植MySQL到嵌入式ARM平台 MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: http://blog.chinaunix.net/space.p ...
- zedboard开发板上移植opencv代码(立体匹配)
前言 公司要做立体匹配相关的项目,已有matlab和c++版本,可是不能做到实时显示立体信息,想要硬件实现实时,无奈本渣也是个硬件的新手,先按照实验室lyq同学的思路在zedboard开发板的纯ARM ...
- 应聘linux/ARM嵌入式开发岗位
**************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...
- ARM嵌入式开发板
iTOP-4412 ARM嵌入式开发板----主要特点 iTOP-4412开发平台是北京迅为电子研发设计的嵌入式开发板平台,核心板配备64位双通道2GB DDR3,16GBEMMC存储,三星原厂S5M ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel
经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- ARM嵌入式开发中的GCC内联汇编__asm__
在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了唯一的选择.但如果完全通过汇编代码实现,又会过于复杂.难以调试.因此,C语言内嵌汇编的方式 ...
随机推荐
- unity 如何打开本地文件夹,并选中文件
public static void OpenDirectory(string path, bool isFile = false) { if (string.IsNullOrEmpty(path)) ...
- ghostscript之pdf处理
ghostscript安装: yum install ghostscript 使用: #把tmp目录下的a.pdf压缩成b.pdf gs -sDEVICE=pdfwrite -dPDFSETTINGS ...
- vue获取不到后端返回的响应头
Response.ContentType = EPPlusHelpler.ExcelContentType; Response.Headers.Add("FileName", fi ...
- scala 抽象类
package com.jason.qianfeng abstract class Person(val gender: String) { val name: String val age: Int ...
- 解决vue项目在ie浏览器缓存问题。
ie浏览器一直是程序员的噩梦.项目在谷歌浏览器上完美运行.在ie浏览器上,缓存问题真心恶心.后台查看了资料说在接口上加上时间戳或随机数就行了.要是这样干,工作量真心大啊.后来我对我们公司大神封装的ax ...
- Oracle Spatial分区应用研究之五:不同分区粒度+本地空间索引效率对比
1.实验目的 若使用本地空间索引,不同分区粒度将产生不同索引组织,其索引分区个数.大小.R-TREE树结构均不相同.那么,在什么分区粒度下的本地空间索引效率较高呢? 2实验数据 实验数据为全国2531 ...
- Linux字符设备驱动基本结构
1.Linux字符设备驱动的基本结构 Linux系统下具有三种设备,分别是字符设备.块设备和网络设备,Linux下的字符设备是指只能一个字节一个字节读写的设备,不能随机读取设备内存中某一数据,读取数据 ...
- setPos 详解
etWindowPos 详解 函数名: SetWindowPos 头文件: winuser.h 函数原型: BOOL SetWindowPos ( HWND hWnd, //窗口句柄 HWND h ...
- (十)pdf的构成之交叉引用表
交叉引用表(xref) 其中包含对文档中所有对象的引用.交叉引用表的目的是允许随机访问文件中的对象,因此我们不需要读取整个PDF文档来定位特定对象.每个对象由交叉引用表中的一个条目表示.(该表保存 ...
- CapsLock魔改大法——变废为宝实现高效编辑
前言 CapsLock,也就是键盘左边中间那个大写锁定.平时很少会用到,跟shift功能重复不谈,更多的时候还会带来各种额外的麻烦. 一直以来的都是一个非常碍事讨厌的存在.就是这么一个垃圾键,偏偏却占 ...











