ARM Linux平台下 OpenCV Camera 实验
一、硬件原理
1. OV2640
1.1 基本功能
OV2640 是一款低功耗、高性能的图像传感器,支持以下功能:
-
最高分辨率:200 万像素(1600x1200)。
-
输出格式:JPEG、YUV、RGB。
-
内置图像处理功能:自动曝光、自动白平衡、自动增益控制等。
1.2 硬件接口
2. CSI
2.1 基本功能
CSI 是一种高速串行接口,专为摄像头模块设计,具有以下特点:
-
支持高带宽数据传输(适合高分辨率和高帧率视频)。
-
低引脚数,减少硬件复杂度。
-
支持多种数据格式(如 RAW、YUV、RGB)。
2.2 硬件原理
CSI 接口通常包括以下信号:
-
数据通道(Data Lanes):
-
差分信号对(如 CSI_D0+/CSI_D0-)。
-
支持 1-4 对数据通道,带宽随通道数增加。
-
-
时钟通道(Clock Lane):
-
差分信号对(如 CSI_CLK+/CSI_CLK-)。
-
用于同步数据传输。
-
-
控制信号:
-
I2C 或 SPI 接口,用于配置摄像头模块。
-
2.3 工作流程
-
初始化:通过 I2C 或 SPI 配置摄像头模块。
-
数据传输:
-
摄像头模块通过 CSI 数据通道发送图像数据。
-
主控设备通过 CSI 时钟通道同步接收数据。
-
-
数据处理:主控设备对接收到的图像数据进行处理或存储。
二、设备树
根节点
&csi {status = "okay";port {csi1_ep: endpoint {remote-endpoint = <&ov2640_ep>;};};
};&i2c1 {ov2640: ov2640@30 {compatible = "ovti,ov2640";reg = <0x30>;pinctrl-names = "default";pinctrl-0 = <&pinctrl_csi1>;clocks = <&clks IMX6UL_CLK_CSI>;clock-names = "csi_mclk";/*pwn-gpios = <&gpio1 4 1>;*/rst-gpios = <&gpio1 2 0>;/*csi_id = <0>;mclk = <24000000>;mclk_source = <0>;*/status = "okay";port {ov2640_ep: endpoint {remote-endpoint = <&csi1_ep>;};};};
};
三、驱动简单分析
四、Qt 编写测试文件
1. 简介
Qt 里有一个 QCamera 类,但是不支持4.1.15 内核版本上使用 OV5640、OV2640。
因为 OV5640、OV2640 的驱动默认是读取 YUYV 格式数据,而 QCamera 里读取的数据是 RGB 格式数据。当然也能通过修改驱动来支持。不过有 V4l2 框架,就没必要这么做了。V4l2 的数据直接可以显示在 fb0,且处理效率比 Qt 来的流程。
直接使用 V4l2 的方案留在后面的视频监控项目上。本次使用的是 Qt+OpenCV 调用摄像头。
OpenCV 的环境搭建:ARM Linux 移植 tslib、Qt和OpenCV-CSDN博客
2. 主要功能
-
摄像头管理
selectCameraDevice(int index)
:选择并打开指定索引的摄像头cameraProcess(bool bl)
:控制摄像头的启动和停止timerTimeOut()
:定时采集摄像头图像并发送信号
-
图像处理
matToQImage(const cv::Mat &img)
:将 OpenCVcv::Mat
格式转换为 QtQImage
格式
-
定时器机制
- 使用
QTimer
控制图像采集频率(33ms,约等于 30fps)
- 使用
3. 程序编写
3.1 .pro 文件
添加 opencv 库
INCLUDEPATH += /home/prover/linux/opencv-3.4.1/install/include
LIBS += /home/prover/linux/opencv-3.4.1/install/lib/libopencv_core.so \/home/prover/linux/opencv-3.4.1/install/lib/libopencv_highgui.so \/home/prover/linux/opencv-3.4.1/install/lib/libopencv_imgproc.so \/home/prover/linux/opencv-3.4.1/install/lib/libopencv_videoio.so \/home/prover/linux/opencv-3.4.1/install/lib/libopencv_imgcodecs.so
3.2 简单分析
3.3 编译
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
/home/prover/linux/qt-5.12.9/arm-qt/bin/qmake
make -j 8
五、测试
1. 手动加载
将内核源码的drivers/media/paltform/mxc/subdev 中的mx6s_capture.c 单独拿出来编译 .ko文件
然后将 ov2640_driver.ko 和 mx6s_capture.ko 文件进行加载即可。
一般加载后,设备为 /dev/video1。然后运行第四节的 Qt 程序即可。
2. 内核修改
配置 4.1.15 内核
按1进入
按Y选中,并进入红框
红框默认是 M 的,改成 Y,并选择 VF SDC。
还有这个也要选中:
如果不出意外的话,就会出意外了:
修改内核源码中的 drivers/media/platform/mxc/capture/ 下的 ipu_prp_vf_sdc.c和ipu_prp_vf_sdc_bg.c
重新编译下内核。
发现取消绑定了。
然后加载自己写的驱动,当然也可以编入到内核的 drivers/media/paltform/mxc/capture:
运行测试前,可以添加格式:drivers\media\platform\mxc\subdev\mx6s_capture.c
static struct mx6s_fmt formats[] = {{.name = "UYVY-16",.fourcc = V4L2_PIX_FMT_UYVY,.pixelformat = V4L2_PIX_FMT_UYVY,.mbus_code = MEDIA_BUS_FMT_UYVY8_2X8,.bpp = 2,}, {.name = "YUYV-16",.fourcc = V4L2_PIX_FMT_YUYV,.pixelformat = V4L2_PIX_FMT_YUYV,.mbus_code = MEDIA_BUS_FMT_YUYV8_2X8,.bpp = 2,}, {.name = "YUV32 (X-Y-U-V)",.fourcc = V4L2_PIX_FMT_YUV32,.pixelformat = V4L2_PIX_FMT_YUV32,.mbus_code = MEDIA_BUS_FMT_AYUV8_1X32,.bpp = 4,}, {.name = "RAWRGB8 (SBGGR8)",.fourcc = V4L2_PIX_FMT_SBGGR8,.pixelformat = V4L2_PIX_FMT_SBGGR8,.mbus_code = MEDIA_BUS_FMT_SBGGR8_1X8,.bpp = 1,}, {.name = "RGB565_LE",.fourcc = V4L2_PIX_FMT_RGB565,.pixelformat = V4L2_PIX_FMT_RGB565,.mbus_code = MEDIA_BUS_FMT_RGB565_2X8_LE,.bpp = 2,}, {.name = "RGB565_BE",.fourcc = V4L2_PIX_FMT_RGB565,.pixelformat = V4L2_PIX_FMT_RGB565,.mbus_code = MEDIA_BUS_FMT_RGB565_2X8_BE,.bpp = 2,}, {.name = "JPEG",.fourcc = V4L2_PIX_FMT_JPEG,.pixelformat = V4L2_PIX_FMT_JPEG,.mbus_code = MEDIA_BUS_FMT_JPEG_1X8,.bpp = 2,}
};
一般加载后,设备为 /dev/video0.
然后运行第四节的 Qt 程序即可。
相关文章:
ARM Linux平台下 OpenCV Camera 实验
一、硬件原理 1. OV2640 1.1 基本功能 OV2640 是一款低功耗、高性能的图像传感器,支持以下功能: 最高分辨率:200 万像素(1600x1200)。 输出格式:JPEG、YUV、RGB。 内置图像处理功能:自动曝…...
【Python爬虫(30)】构建高效爬虫数据管理体系:从抓取到协作
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
淘宝/天猫店铺订单数据导出、销售报表设计与数据分析指南
在电商运营中,订单数据是店铺运营的核心资产之一。通过对订单数据的导出、整理和分析,商家可以更好地了解销售情况、优化运营策略、提升客户满意度,并制定科学的业务决策。本文将详细介绍淘宝/天猫店铺订单数据的导出方法、销售报表的设计思路…...
EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
在当今智能硬件迅猛发展的时代,音视频通讯技术已成为设备与用户、设备与设备间不可或缺的沟通纽带。而EasyRTC,凭借其无可比拟的实时性能、卓越的互动感受以及强大的交互实力,正逐步演变为智能硬件领域的“超级动力”核心。特别是其倾力打造的…...
Docker Mysql 数据迁移
查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…...
【文本】词嵌入经典模型:从one-hot到BERT
【文本】词嵌入经典模型:从one-hot到BERT one-hot编码(独热编码): 根据词表的所有词构建一个向量特征。每一个文段中每个单词有一个词向量(二进制且只有一位为1) — 稀疏、缺乏语义(father&am…...
unity学习49:寻路网格链接 offMeshLinks, 以及传送门效果
目录 1 网格链接 offMeshLinks 功能入口 1.1 unity 2022之前 1.2 unity 2022之后 2 网格链接 offMeshLinks 功能设置 3 点击 offMeshLinks 功能里的bake 3.1 unity 2022之前 3.2 unity 2022之后 3.3 实测link 3.4 跳跃距离增大,可以实现轻功类的效果 4 …...
【SQL】SQL多表查询
多表查询案例联系点击此处 🎄概念 一般我们说的多表查询都涉及外键和父子表之间的关系。比如一对多:一般前面指的是父表后面指的是子表。 ⭐分类 一对多(多对一) 多对多 一对一 ⭐一对多 📢案例:部门与员工的关系 📢关系&…...
linux网络安全设置
TCP SYN Flood 攻击 TCP SYN Flood是一种常见,而且有效的远端(远程)拒绝服务(Denial of Service)攻击方式,它透过一定的操作破坏TCP三次握手建立正常连接,占用并耗 费系统资源,使得提供TCP服务的主机系统无法正常工作。由於TCP SY…...
AutoDock CrankPep or ADCP进行蛋白质多肽对接
需求描述 使用AutoDock CrankPep or ADCP进行蛋白质多肽对接 硬件及系统配置 自用电脑型号如下: 电脑:Precision Tower 7810 (Dell Inc.) CPU : Intel Xeon CPU E5-2686 v4 2.30GHz GPU: NVIDIA GeForce GTX 1070 Linux版本&a…...
Qt开源项目获取
GitHub上超实用的Qt开源项目,码住不谢!🎉 宝子们,今天来给大家安利一波GitHub上超棒的Qt开源项目,无论是学习还是开发,都能找到超多灵感和实用工具,快来看看有没有你需要的吧!1. Qt-Advanced-Docking-System完美的Dock窗口布局解决方案,让你的窗口管理变得超级灵活。…...
Java——super
在Java中,super关键字用于引用父类的成员(属性、方法或构造器)。它在继承关系中非常重要,主要用于以下几种场景: 1. 调用父类的构造器 在子类的构造器中,可以使用super关键字调用父类的构造器。super()必须…...
【设计模式精讲】创建型模式之原型模式(深克隆、浅克隆)
文章目录 第四章 创建型模式4.5 原型模式4.5.1 原型模式介绍4.5.2 原型模式原理4.5.3 深克隆与浅克隆4.5.4 原型模式应用实例4.5.5 原型模式总结 个人主页:道友老李 欢迎加入社区:道友老李的学习社区 第四章 创建型模式 4.5 原型模式 4.5.1 原型模式介…...
DeepSeek动画视频全攻略:从架构到本地部署
DeepSeek 本身并不直接生成动画视频,而是通过与一系列先进的 AI 工具和传统软件协作,完成动画视频的制作任务。这一独特的架构模式,使得 DeepSeek 在动画视频创作领域发挥着不可或缺的辅助作用。其核心流程主要包括脚本生成、画面设计、视频合成与后期处理这几个关键环节。 …...
嵌入式面试高频面试题:嵌入式系统调试方法大全
目录 调试基础概述 调试的重要性 嵌入式系统特点 调试流程 硬件调试方法 JTAG 调试 仿真器调试 逻辑分析仪 软件调试技巧 断点调试 日志输出 内存监视 代码静态分析 嵌入式调试器 常用调试器介绍 调试器使用技巧 远程调试方法 串口调试 网络调试 特殊调试场…...
Java中Map循环安全的删除数据的4中方法
文章目录 前言一、使用Iterator删除二、使用 removeIf(Java 8)三、遍历时记录需要删除的键(不推荐)四、使用 Stream(Java 8)总结 前言 在 Java 中,遍历 HashMap 并删除数据时,直接使…...
影刀RPA中级证书-Excel进阶-开票清单
1.操作题需求 请参照视频内容,将开票账单表格中的数据整理成开票清单。请下载 开票账单.xlsx 整理规则如下: 1. 金额为0的数据为赠品,无需开票,需删除2. 开票清单需要从开票账单中获取的数据包括有开票名称、数量、金额、税率&…...
PMBOK第7版整体架构全面详解
1. 引言 7月1日对于项目管理从业者和研究者而言,是个非凡意义的一个时间,这一天,翘首以待的《 项 目管理知识体系指南 》(PMBOK)第七版终于发布了。 总体而言,PMBOK第七版集百家之所长,成一…...
el-dropdown选中效果
vue2版本 <template><el-dropdown size"mini" command"handleCommand"><span class"el-dropdown-link">{{ selectedOption }}<i class"el-icon-arrow-down el-icon--right"></i></span><el-d…...
解决 `pip install open-webui` 时的编译错误:Microsoft Visual C++ 14.0 或更高版本缺失
在尝试安装 Python 包 open-webui 时,如果你遇到了如下错误信息: error: subprocess-exited-with-error Building wheel for chroma-hnswlib (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [5 lines of output]running bdist_w…...
git使用指南
一、git客户端设置 git config --global http.sslVerify false git config --global user.name 315222 git config --global user.email li_feng10dahuatech.com ssh-keygen -t rsa -C li_feng10dahuatech.com...
SpringBoot整合Redis和Redision锁
参考文章 1.Redis 1.导入依赖 <!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.c…...
DeepSeek与ChatGPT的对比分析
一 概述 1 DeepSeek DeepSeek是杭州深度求索(DeepSeek)官方推出的AI助手,免费体验与全球领先AI模型的互动交流。总参数达到6710亿的DeepSeek-V3大模型,多项性能指标对齐海外顶尖模型,用更快的速度、更加全面强…...
部署前端项目
前端项目部署是指将前端应用程序从开发环境转移到生产环境的过程,涉及上传代码和资源文件至服务器并确保其正确运行,以下是详细步骤: 一、前期准备 检查项目依赖:确保项目的所有依赖都已正确安装,并更新到最新版本。常…...
python-leetcode 38.翻转二叉树
题目: 给定一个二叉树的根节点root,检查它是否轴对称。 方法一:递归 如果一个树的左子树与右子树镜像对称,那么这个树是对称的。 互为镜像的条件:他们的两个根结点具有相同的值,每棵树的右子树都与另一个树的左子树…...
js中常用方法整理
数据类型 typeOf()Number()parseInt()parseFloat()- * / %检测数据类型转换为数字转换为整数类型转换为浮点类型非加法的数字运算toString()Boolean()String()转换为字符串,不能转换undefined/null字符串拼接转换为布尔类型转换为字符串、所有…...
【云原生】最新版Kubernetes集群基于Containerd部署
文章目录 Kubernetes集群基于Containerd部署(单主多从模式)资源列表基础环境一、基础环境准备1.1、关闭Swap分区1.2、添加hosts解析1.3、桥接的IPv4流量传递给iptables的链 二、准备Containerd容器运行时2.1、安装Containerd2.2、配置Containerd2.3、启动Containerd 三、部署Ku…...
Flink CDC详解
一、Flink CDC 概述 1.1 什么是 Flink CDC? Flink CDC 是 Apache Flink 提供的一种实时数据捕获技术,主要用于从数据库中捕获增量数据变更(如插入、更新、删除操作),并将这些变更数据传输到目标系统进行实时处理或存储。 1.2 Flink CDC 的核心价值 实时数据处理:能够实…...
匹配算法:向下就近原则,向下没有就向上
匹配算法:向下就近原则,向下没有就向上 实现方式一实现方式二总结 实现方式一 private static List<Integer> findMatches(List<Integer> sourceList, List<Integer> searchValues) {List<Integer> sortedList sourceList.stre…...
网络安全三件套
一、在线安全的四个误解 Internet实际上是个有来有往的世界,你可以很轻松地连接到你喜爱的站点,而其他人,例如黑客也很方便地连接到你的机器。实际上,很多机器都因为自己很糟糕的在线安全设置无意间在机器和系统中留下了“…...
NLP-RNN-LSTM浅析
目录 双向 LSTM(Bi - LSTM) 双向 LSTM(Bi - LSTM)原理深入讲解 代码示例(基于 PyTorch) LSTM 应用到双向 RNN 中 代码示例(基于 PyTorch) 双向 LSTM - CRF(Conditio…...
深入解析 iText 7:从 PDF 文档中提取文本和图像
在现代开发中,PDF 文件的操作是不可避免的一部分。无论是生成报告、解析文档,还是从文件中提取信息,我们常常需要处理 PDF 文件。iText 是一个非常强大的库,广泛应用于 PDF 文件的创建、修改和解析。自 iText 7 发布以来ÿ…...
【AI】GitHub Copilot
GitHub Copilot 是一款由 GitHub 和 OpenAI 合作开发的 AI 编程助手,它可以在多种开发工具中使用。以下是 GitHub Copilot 支持的主要开发工具和平台: 1. Visual Studio Code (VS Code) 官方支持:GitHub Copilot 在 VS Code 中拥有最完整的集…...
深入理解 MySQL 8 C++ 源码:SELECT MOD(MONTH(NOW()), 2) 的函数执行过程
MySQL 作为最流行的关系型数据库之一,其内部实现机制一直是开发者探索的热点。本文将以一条简单的 SQL 查询 SELECT MOD(MONTH(NOW()), 2) 为例,深入分析 MySQL 8 源码中内置函数 MOD、MONTH 和 NOW 的执行过程,揭示其底层实现逻辑。 一、SQL…...
基于深度学习进行呼吸音检测的详细示例
以下是一个基于深度学习进行呼吸音检测的详细示例,我们将使用Python语言以及一些常见的深度学习库(如TensorFlow、Keras)和数据处理库(如numpy、pandas),同时会用到音频处理库librosa。整个流程包括数据加载…...
Python 正则表达式的非捕获组介绍
在 Python 正则表达式中,非捕获组 ((?:...)) 是一种用于分组但不保存匹配结果的结构。它与普通的捕获组 (...) 语法类似,但在匹配时不会创建编号或命名的组,常用于简化正则表达式和提高性能。 1. 语法 (?:pattern)?: 表示非捕获标记。pat…...
用大内存主机下载Visual Studio
用一台内存达到128G的主机下载Visual Studio 2022,用的是公司网络。下载速度让我吃了一惊,没人用网络了?还是网站提速了?以前最大只能达到5MB/秒。记录这段经历,是用来分析公司网络用的.........
快速入门——Vue框架快速上手
学习自哔哩哔哩上的“刘老师教编程”,具体学习的网站为:8.Vue框架快速上手_哔哩哔哩_bilibili,以下是看课后做的笔记,仅供参考。 第一节:前端环境准备 编码工具VSCode【www.code.visualstudio.com】/WebStorm也可&am…...
zero自动化框架搭建---Git安装详解
一、Git下载 下载安装包 官网下载 下载的地址就是官网即可:Git - Downloads 进来直接选择windows的安装包下载 选择安装位置 双击安装包安装,选择安装地址后点击next 选择安装的组件,默认即可 也可按照需要自行选择 Windows Explorer i…...
适用于复杂背景的YOLOv8改进:基于DCN的特征提取能力提升研究
文章目录 1. YOLOv8的性能瓶颈与改进需求1.1 YOLOv8的优势与局限性1.2 可变形卷积(DCN)的优势 2. DCN在YOLOv8中的应用2.1 DCN的演变与YOLOv8的结合2.2 将DCN嵌入YOLOv8的结构中2.2.1 DCNv1在YOLOv8中的应用2.2.2 DCNv2与DCNv3的优化 2.3 实验与性能对比…...
Java 大视界 -- 深度洞察 Java 大数据安全多方计算的前沿趋势与应用革新(52)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
Flutter:动态表单(在不确定字段的情况下,生成动态表单)
关于数据模型:模型就是一种规范约束,便于维护管理,在不确定表单内会出现什么数据时,就没有模型一说。 这时就要用到动态表单(根据接口返回的字段,生成动态表单) 1、观察数据格式,定义…...
Redis存在线程安全问题吗?
Redis本身在其单线程模型下是线程安全的,但在特定应用场景下,仍可能面临线程安全相关的挑战。以下是对Redis线程安全性的详细讲解: Redis线程安全的基础 单线程模型: Redis采用单线程模型来处理客户端的请求。这意味着࿰…...
Maven 与 Kubernetes 部署:构建和部署到 Kubernetes 环境中
在现代的 DevOps 实践中,Kubernetes 被广泛用于容器化应用的自动化部署、扩展和管理。而 Maven 是 Java 项目中常用的构建工具,通常用于依赖管理、构建、打包等任务。在许多项目中,Maven 和 Kubernetes 可以结合起来,完成 容器化构…...
与本地电脑PDF文档对话的PDF问答程序
文章目录 PDF问答程序程序流程处理PDF文档创建问答链 在探索和学习新技术时,了解LangChain框架的理论知识固然重要,但实际的案例分析与实践尝试能为你提供更加直观的认识和更深人的理解。本文主要以解析案例代码为主。通过具体的实践操作,你可…...
什么是uniapi
“UniAPI”有两种不同的含义,具体取决于上下文: 1. uni-app 的 API uni-app 是一个基于 Vue.js 的跨平台应用开发框架,允许开发者编写一套代码并发布到 iOS、Android、Web、以及各种小程序等多个平台。uni-app 的 API 是其核心功能之一&…...
网络运维学习笔记 012网工初级(HCIA-Datacom与CCNA-EI)某机构新增:GRE隧道与EBGP实施
文章目录 GRE隧道(通用路由封装,Generic Routing Encapsulation)协议号47实验:思科:开始实施: 华为:开始实施: eBGP实施思科:华为: GRE隧道(通用路…...
Spring MVC 的核心以及执行流程
Spring MVC的核心 Spring MVC是Spring框架中的一个重要模块,它采用了经典的MVC(Model-View-Controller)设计模式。 MVC是一种软件架构的思想,它将软件按照模型(Model)、视图(View)…...
vue单据打印 一维码、二维码实现
编码规则与 JavaScript 代码实现 编码规则数组:定义了 Code 128 条形码编码规则数组 BARS,其中每个数字对应一种条形码的线条组合模式。 const BARS [212222,222122,222221,121223,121322,131222,122213,122312,132212,221213,221312,231212,112232,12…...
01数据准备 抓取图片 通过爬虫方式获取bing的关键词搜索图片
为了获取训练所需的图片,我们最常用的手段就是自己去写一个爬虫去获取相关图片。本文将重点围绕如何采用爬虫的方式获取训练所需的图片素材进行讲解,为了大家能够够直观的掌握相关技术,参考本文的相关过程和代码获取自己的数据图片素材,笔者将详细介绍实现过程。 1、确定图…...