嵌入式Linux下使用OpenCV

2023-11-06

By Toradex 秦海

1). 简介

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序,以解决人机交互,人脸识别以及动作跟踪等领域的问题。

 

本文所采用的测试平台为来自Toradex的ARM 计算机模块平台Colibri iMX6DL搭配其对应的开发载板Colibri Eva Board.

 

2. 准备

a). Colibri iMX6DL系统通过载板X18连接LVDS LCD显示屏。

b). USB camera 用于后续OpenCV演示程序测试。

c). Colibri iMX6DL 系统使用Toradex Linux Release V2.6.1,不过原生没有包含OpenCV支持,可以通过下面两种方式集成OpenCV。

./ 在Colibri iMX6DL官方Linux release系统上面,通过opkg软件管理器在线安装

------------------------------

root@colibri-imx6# opkg update

root@colibri-imx6# opkg install opencv

root@colibri-imx6# opkg install opencv-apps

------------------------------

./ 基于Toradex Openembedded环境添加OpenCV相关并重新编译,好处可以更方便的定制所需安装的包,如添加ffmpeg/libav支持。建立环境和编译相关请参考这里,涉及到添加OpenCV支持的修改请参考下面两个patch文件,然后根据这里说明将重新编译好的image文件更新到Colibri iMX6DL模块上面去。

------------------------------

//local.conf文件添加OpenCV支持

https://github.com/simonqin09/opencv_patch/blob/master/local.conf.opencv.patch

// 修改OpenCV recipte添加FFMPEG/libav和multicore(TBB)支持,不过请注意libav是商业授权,这里只作为测试使用,不能直接用于商业发布。

https://github.com/simonqin09/opencv_patch/blob/master/opencv_2.4.bb.patch

//修改OpenCV bitbake recipt添加gstreamer支持

https://github.com/simonqin09/opencv_patch/blob/master/opencv_2.4.bbappend.patch

 

// bitbake image

Toradex-ubuntu$ bitbake angstrom-lxde-image

 

//bitbake toolchain

Toradex-ubuntu$ bitbake -c populate_sdk angstrom-lxde-image

------------------------------

 

d). 在开发主机安装上面生成的toolchain,可以放到任意位置,本文为了后续操作方便,将安装好的SDK目录下的”sysroots”目录链接到”/home/username/sysroots”下面。

------------------------------

Toradex-ubuntu$ ./angstrom-glibc-x86_64-armv7at2hf-vfp-neon-v2015.12-toolchain.sh

Toradex-ubuntu$ ln –s SDK folder/sysroots /home/username/sysroots

------------------------------

 

3). OpenCV Demo演示

a). 本文使用的演示程序是修改于openCV 文档中的基于Haar Cascades 级联分类器的人脸识别demo,源代码如下

------------------------------

https://github.com/simonqin09/opencv/blob/master/facedetect.cpp

 

// 源代码中需要对应修改“haarcascade_frontalface_alt2.xml”文件在Colibri iMX6的放置路径,这里使用的是”/home/root”

// 源代码中需要对应修改USB 摄像头对应的设备名字,本文是”/dev/video0”, 在你的环境可以通过”v4l2-ctl –list-devices”命令来确定

------------------------------

 

b). 对应的Makefile如下,如果你的toolchain安装在不同目录,要对应修改sysroots目录路径

https://github.com/simonqin09/opencv/blob/master/Makefile

c). 将编译好的可执行文件以及下面地址的“haarcascade_frontalface_alt2.xml”文件都复制到Colibri iMX6DL同一目录下面,文本使用目录”/home/root”

d). 执行程序,当有人脸正面出现在摄像头内就会显示识别出的人脸数目

----------------------------

root@colibri-imx6# ./facedetect

----------------------------


 

4). 总结

本文基于NXP iMX6嵌入式平台测试了OpenCV的基本部署和运行,另外虽然OpenCV用C++编写,也支持很多其他语言的接口甚至使用CUDA的GPU接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式Linux下使用OpenCV 的相关文章

  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • OpenCv 与 Android studio 1.3+ 使用新的 gradle - 未定义的参考

    我在使用原生 OpenCv 2 4 11 3 0 0 也可以 和 Android Studio 1 3 以及新的 ndk 支持时遇到问题 所有关于 mk 文件的教程 但我想将它与新的实验性 gradle 一起使用 使用 Kiran 答案An
  • Opencv C++ 检测并裁剪图像上的白色区域

    我在网上搜索过 已经找到了一些方法来完成我想要的事情 但是与我需要的相比 这些方法的效率较低 我有一个 kinect 使用 Microsoft SDK 当前正在获取一个移除背景的人 将结果保存在 3 通道 Mat 中 并将该人从背景中移除
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • 如何在数据部分(RAM)中保留一定范围的内存并防止同一应用程序使用该内存的堆/堆栈?

    我想在 RAM 中保留 分配一定范围的内存 并且同一应用程序不应覆盖或使用该范围的内存进行堆 堆栈存储 如何在内存中分配一定范围的内存以防止堆栈 堆覆盖 我考虑过向应用程序本身添加 或分配 一个数组并保留内存 但它被编译器优化了 因为它在应
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • 如何在 Linux 内核中定义并触发我自己的新软中断?

    我想在 Linux 内核中创建自己的软中断 这是正确的方法吗 In the init我想触发该模块的softirq我将添加一个调用 394 void open softirq int nr void action struct softir
  • 更新 MMU 转换表的正确方法是什么

    我在我的 s3c2440 板上启用了 MMU 3G 4G 内存 故障属性 当我没有读 写 3G 4G 内存时一切都很好 所以为了测试页面错误向量 我写入了 0xFF 3G地址 正如我所料 我从FSR中得到了正确的值 所以我在 do page
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac

随机推荐

  • 使用config.gradle统一管理项目的依赖库

    转载原文地址 https www jianshu com p a4b211df5bdf 配置 新建config gradle 和项目的build gradle同级 config gradle文件的位置 内容为 ext android com
  • Rust使用Actix-Web验证Auth Web微服务 - 完整教程第1部分

    Rust使用Actix Web验证Auth Web微服务 完整教程第1部分 文章出自Rust中文社区 我们将创建一个rust仅处理用户注册和身份验证的Web服务器 我将在逐步解释每个文件中的步骤 完整的项目代码在这里 事件的流程如下所示 使
  • linux中如何安装windows

    首先将windows镜像拷贝到根目录的ios下 这个文件可自行选择位置 我这里使用的是windows10 并且已经提前安装了虚拟机组件 然后用root用户的身份在命令行输入 virt manager 点击file下面的小电脑 然后选择刚刚拷
  • FBXSDK踩坑之——搭建环境

    1 创建一个C 控制台影用程序 2 C 常规设置里设置附加包含目录 3 设置连接器常规设置的附加库目录 4 连接器的输入设置里设置附加依赖项和忽略特定默认库 5 根据前面选择的附加依赖项来选择运行库 选择参考 注意 如果使用动态链接要设置预
  • Spring Boot集成持久化Quartz定时任务管理和界面展示

    前言 本文是对之前的一篇文章Spring SpringMVC mybatis Quartz整合代码部分做的一个修改和补充 其中最大的变化就是后台框架变成了Spring Boot 本工程所用到的技术或工具有 Spring Boot Mybat
  • Virtual DOM(虚拟 DOM)

    文章目录 什么是 Virtual DOM 为什么要使用 Virtual DOM 虚拟 DOM 的作用 虚拟 DOM 库 Snabbdom 基本使用 安装 parcel 配置 scripts 目录结构 导入 Snabbdom 基本使用 包含子
  • 一文看尽深度学习中的各种数据增强

    目录 引言 数据增强的定义 数据增强的作用 省钱 省时 省心 提升模型性能 数据增强的方式 基础数据增强方法 Image Manipulation Rotation Translation Shearing Flipping Croppin
  • unity 游戏开发过程中需要注意和后期优化的重点方向和难点分析(大白话理论篇)

    开发游戏也有近3年时间了 自己是做app移动开发出身 可能入手unity开发手机游戏 算是有点小优势 毕竟起码开始就有点unity它是怎么一步步转化为一个用户用的app 在用unity做游戏的时候 自己也尝试过使用cocos2d x 感觉下
  • 使用 Docker 搭建你自己的 RSS 服务(FreshRSS)

    本文使用 署名 4 0 国际 CC BY 4 0 许可协议 欢迎转载 或重新修改使用 但需要注明来源 署名 4 0 国际 CC BY 4 0 本文作者 苏洋 创建时间 2019年01月05日 统计字数 1983字 阅读时间 4分钟阅读 本文
  • sys.path.insert()用法

    注 sys path模块是动态的修改系统路径 模块要处于Python搜索路径中的目录里才能被导入 但我们不喜欢维护一个永久性的大目录 因为其他所有的Python脚本和应用程序导入模块的时候性能都会被拖累 本节代码动态地在该路径中添加了一个
  • 循环动态渲染img标签

    img alt listInfo icon buKa png type 补卡 id 1 icon xiuJia png type 休假 id 2
  • VS工程的3个基本文件

    VS的工程根目录下有3个文件 这3个文件都可以用记事本打开 其中 1 MyTest sln 工程主文件 含属性设置 工程从该文件打开 工程的主要属性设置在该文件中 2 MyTest filters 工程目录结构筛选器 工程的目录结构保存在这
  • leetCode热题52-57 解题代码,调试代码和思路

    前言 本文属于特定的六道题目题解和调试代码 1 剑指 Offer 22 链表中倒数第k个节点 Easy 2022 09 01 91 2 76 最小覆盖子串 Hard 2023 03 27 82 3 165 比较版本号 Medium 2023
  • Me and My Girlfriend靶机渗透

    背景描述 这个VM告诉我们 有一对恋人 即Alice和Bob 这对夫妻本来很浪漫 但是自从Alice在一家私人公司 Ceban Corp 工作以来 爱丽丝对鲍勃的态度发生了一些变化是 隐藏的 而鲍勃 Bob 寻求您的帮助 以获取爱丽丝 Al
  • Python 第四章 字典:当索引不好用时

    字典 是Python中唯一内建的映射数据结构类型 这里的映射是指通过名字引用值 字典中的值并没有特殊的顺序 值都是存储在一个特定的键里 键可以是数字 字符串甚至是元祖 什么是键 什么是值 怎么映射呢 请继续看下去 创建和使用字典 下面来创建
  • ‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

    运行 npm run serve 报以下错误 首先检查一下文件中是否有node modules文件夹 如果没有则执行以下代码 npm install 其中可能会有很多警告 不用搭理 如果文件中已经有node modules文件夹 那么先把n
  • 接口自动化测试总结

    前言 本文是我在公司总结的一点点个人建议 可能有非常多的遗漏 先记录下来这时候我的理解 公司是做共享单车业务的 所以场景基本上也可以复用 毕竟大家都骑过单车 注明 code是我司接口返回的标志 编写之前 接口相关 这块总结不全 了解接口的功
  • 【Springboot WebSocket STOMP使用 2】STOMP使用@SendToUser实现用户个人请求-响应

    背景 STOMP协议的模型是 订阅 发布 式的 所以一般场景是同一个主题的广播 而有些场景下用户既想保持当前的WebSocket Session复用 又想消息的响应只有我自己能收到 指定其他某一个用户也行 不过得用其他api方法 不需要别人
  • 九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)

    九月十月百度人搜 阿里巴巴 腾讯华为小米搜狗笔试面试八十题 引言 自发表上一篇文章至今 事实上 上篇文章更新了近3个月之久 blog已经停了3个多月 而在那之前 自开博以来的21个月每月都不曾断过 正如上一篇文章支持向量机通俗导论 理解SV
  • 嵌入式Linux下使用OpenCV

    By Toradex 秦海 1 简介 OpenCV的全称是Open Source Computer Vision Library 是一个跨平台的计算机视觉库 OpenCV是由英特尔公司发起并参与开发 以BSD许可证授权发行 可以在商业和研究