RK3568使用opencv(使用摄像头捕获图像数据显示)
文章目录
- 一、opencv相关的类
- 1. **cv::VideoCapture**
- 2. **cv::Mat**
- 3. **cv::cvtColor**
- 4. **QImage**
- 5. **QPixmap**
- 总结
- 二、代码实现
一、opencv相关的类
1. cv::VideoCapture
cv::VideoCapture
是 OpenCV 中用于视频捕捉的类,常用于从摄像头、视频文件、或者图像序列中捕获视频帧。它的主要功能是获取视频流或实时图像。
-
作用:它用于从视频文件、摄像头、图像序列中捕获图像帧,在这个示例中,我们使用它来从摄像头捕获视频流。
-
常用函数:
cv::VideoCapture cap(0)
:构造函数,打开默认摄像头。如果需要打开其他设备或文件,可以传入不同的参数(例如,cap.open("video.mp4")
用于打开视频文件)。cap.isOpened()
:检查摄像头是否成功打开。返回true
表示成功,false
表示失败。cap >> frame
:从摄像头捕获一帧图像并将其存储到frame
中。每次调用cap >> frame
时都会读取摄像头的下一帧图像。cap.release()
:释放摄像头资源,当不再需要时关闭摄像头。
示例:
cv::VideoCapture cap(0); // 打开默认摄像头 if (!cap.isOpened()) {qWarning("Cannot open camera");return; }cv::Mat frame; cap >> frame; // 从摄像头捕获一帧图像
2. cv::Mat
cv::Mat
是 OpenCV 中最常用的图像数据结构。它表示一个矩阵,通常用来存储图像数据,图像的每个像素对应矩阵中的一个元素。
-
作用:用于存储图像数据。每当我们从摄像头捕获一帧图像时,它会以
cv::Mat
的形式存储。 -
常用函数:
cv::Mat frame
:声明一个cv::Mat
对象,用于存储图像。frame.data
:返回图像数据的指针,表示图像的原始数据。frame.cols
和frame.rows
:分别表示图像的列数(宽度)和行数(高度)。frame.step
:表示图像数据每一行的字节数,通常用于处理图像数据时的行对齐。
示例:
cv::Mat frame; cap >> frame; // 从摄像头捕获图像帧
3. cv::cvtColor
cv::cvtColor
是 OpenCV 中用来进行颜色空间转换的函数。它可以将图像从一种颜色格式转换为另一种颜色格式。例如,BGR 转为 RGB、RGB 转为灰度图等。
-
作用:将图像从一个颜色空间转换为另一个颜色空间。因为 OpenCV 默认使用 BGR 格式,而 Qt 使用 RGB 格式,所以我们需要将捕获的图像从 BGR 转换为 RGB。
-
常用用法:
cv::cvtColor(cvImage, cvImage, cv::COLOR_BGR2RGB);
cvImage
:待转换的图像。cv::COLOR_BGR2RGB
:转换类型,表示从 BGR 转为 RGB。
示例:
cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB); // 将BGR格式转换为RGB格式
4. QImage
QImage
是 Qt 用来表示图像数据的类。它是 Qt 中图像处理的核心类,用于加载、保存和显示图像。
-
作用:用于在 Qt 应用中表示和操作图像数据。
QImage
适用于将图像数据加载到内存中,并支持多种格式的图像显示和保存。 -
常用函数:
QImage::QImage(const uchar *data, int width, int height, int stride, Format format)
:构造函数,用于从原始数据创建一个 QImage 对象。data
是图像数据的指针,width
和height
是图像的尺寸,stride
是每行数据的字节数,format
是图像的格式。QImage::Format_RGB888
:表示 24 位 RGB 格式,每个像素占 3 个字节(R、G、B)。
示例:
QImage img(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);
frame.data
:图像数据的指针。frame.cols
和frame.rows
:图像的宽和高。frame.step
:每行图像数据的字节数。QImage::Format_RGB888
:指定图像格式为 24 位 RGB。
5. QPixmap
QPixmap
是 Qt 中用于显示图像的类。它比 QImage
更适合用作显示图像,因为它能更高效地处理图像的显示。
-
作用:用于显示图像。
QPixmap
与QImage
类似,但它是一个更适合用于图形显示的类,通常用于在 Qt 控件中展示图像。 -
常用函数:
QPixmap::fromImage(QImage &image)
:从QImage
创建一个QPixmap
。
示例:
label->setPixmap(QPixmap::fromImage(img)); // 将QImage转换为QPixmap并显示
总结
cv::VideoCapture
:用于从视频设备(如摄像头)获取图像帧。cv::Mat
:用于存储图像数据的矩阵。每一帧图像都是一个cv::Mat
对象。cv::cvtColor
:用于颜色空间转换,通常用于将 OpenCV 的 BGR 格式转换为 Qt 的 RGB 格式。QImage
:Qt 用于表示图像数据的类,提供了从原始数据创建图像并显示的功能。QPixmap
:Qt 用于显示图像的类,通常用于在界面中显示图像。
这些类和函数组合在一起,使得 OpenCV 能够与 Qt 无缝集成,从摄像头捕获图像并显示在 Qt 界面中。
二、代码实现
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>
#include <QTimer>
#include <opencv2/opencv.hpp>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void updateFrame(); // 更新视频帧private:Ui::Widget *ui;QLabel *label; // 用于显示视频的QLabelcv::VideoCapture cap; // OpenCV的摄像头捕获对象QTimer *timer; // 用于定时刷新视频帧
};#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QImage>
#include <QPixmap>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent),ui(new Ui::Widget),label(new QLabel(this)),cap(0) // 使用默认摄像头
{ui->setupUi(this);label->setGeometry(10, 10, 640, 480); // 设置QLabel的位置和大小if (!cap.isOpened()) {qWarning("Cannot open camera");return;}// 创建定时器,每隔30ms捕获一帧图像并更新显示timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &Widget::updateFrame);timer->start(30); // 30ms更新一次(约33帧每秒)
}Widget::~Widget()
{delete ui;
}void Widget::updateFrame()
{cv::Mat frame;cap >> frame; // 捕获一帧图像if (frame.empty()) {qWarning("Captured frame is empty!");return;}// 将OpenCV图像从BGR格式转换为RGB格式cv::cvtColor(frame, frame, cv::COLOR_BGR2RGB);// 将OpenCV的Mat转换为Qt支持的QImageQImage img(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);// 将QImage转换为QPixmap并设置到QLabel上显示label->setPixmap(QPixmap::fromImage(img));
}
相关文章:
RK3568使用opencv(使用摄像头捕获图像数据显示)
文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结 二、代码实现 一、opencv相关的类 1. cv::VideoCapture cv::VideoCapture 是 OpenCV 中用于视频捕捉的类,常用于从摄像头、视频文件、或者…...
leetcode——排序链表(java)
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3: …...
Windows安装Miniconda和PySide6以及配置PyCharm
目录 1. 选择Miniconda 2. 下载Miniconda 3. 安装Miniconda 4. 在base环境下创建pyside6环境 5. 安装pyside6环境 6. 配置PyCharm环境 7. 运行第一个程序效果 1. 选择Miniconda 选择Miniconda而没有选择Anaconda,是因为它是一个更小的Anaconda发行版&#x…...
floodfill算法(6题)
本质就是找出性质相似的连通块 目录 1.图像渲染 2.岛屿数量 3.岛屿的最大面积 4.被围绕的区域 5.太平洋大西洋水流问题 6.扫雷游戏 1.图像渲染 733. 图像渲染 - 力扣(LeetCode) 我们使用深度优先遍历去遍历即可,也不需要返回值。 值得…...
Spring集成Redis|通用Redis工具类
一、基础使用 概述 在SpringBoot中一般使用RedisTemplate提供的方法来操作Redis。那么使用SpringBoot整合Redis需要 那些步骤呢。 1、 JedisPoolConfig (这个是配置连接池) 2、 RedisConnectionFactory 这个是配置连接信息,这里的RedisConnectionFactory是一个接 …...
python:洛伦兹变换
洛伦兹变换(Lorentz transformations)是相对论中的一个重要概念,特别是在讨论时空的变换时非常重要。在四维时空的背景下,洛伦兹变换描述了在不同惯性参考系之间如何变换时间和空间坐标。在狭义相对论中,洛伦兹变换通常…...
题单:插入排序
题目描述 给定 n 个元素的数组(下标从1开始计),请使用插入排序对其进行排序(升序)。 输入格式 两行,第一行为一个整数 n,表示元素的个数。 第二行 n 个空格分隔的整数,表示数组的…...
【Spring】Spring启示录
目录 前言 一、示例程序 二、OCP开闭原则 三、依赖倒置原则DIP 四、控制反转IOC 总结 前言 在软件开发的世界里,随着项目的增长和需求的变化,如何保持代码的灵活性、可维护性和扩展性成为了每个开发者必须面对的问题。传统的面向过程或基于类的设计…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.30 性能巅峰:NumPy代码优化全攻略
1.30 性能巅峰:NumPy代码优化全攻略 目录 #mermaid-svg-CMVXy3CN2tNmW8RJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CMVXy3CN2tNmW8RJ .error-icon{fill:#552222;}#mermaid-svg-CMVXy3CN2tNmW8RJ …...
C#方法(练习)
1.定义一个函数,输入三个值,找出三个数中的最小值 2.定义一个函数,输入三个值,找出三个数中的最大值 3.定义一个函数,输入三个值,找出三个数中的平均值 4.定义一个函数,计算一个数的 N 次方 Pow(2, 3)返回8 5.传入十一…...
Node.js 的底层原理
Node.js 的底层原理 1. 事件驱动和非阻塞 I/O Node.js 基于 Chrome V8 引擎,使用 JavaScript 作为开发语言。它采用事件驱动和非阻塞 I/O 模型,使其轻量且高效。通过 libuv 库实现跨平台的异步 I/O,包括文件操作、网络请求等。 2. 单线程事…...
react native在windows环境搭建并使用脚手架新建工程
截止到2024-1-11,使用的主要软件的版本如下: 软件实体版本react-native0.77.0react18.3.1react-native-community/cli15.0.1Android Studio2022.3.1 Patch3Android SDKAndroid SDK Platform 34 35Android SDKAndroid SDK Tools 34 35Android SDKIntel x…...
实战:如何快速让新网站被百度收录?
本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/22.html 要让新网站快速被百度收录,可以采取以下实战策略: 一、网站基础优化 网站结构清晰:确保网站的结构简洁清晰,符合百度的抓取规则。主…...
Nuxt:利用public-ip这个npm包来获取公网IP
目录 一、安装public-ip包1.在Vue组件中使用2.在Nuxt.js插件中使用public-ip 一、安装public-ip包 npm install public-ip1.在Vue组件中使用 你可以在Nuxt.js的任意组件或者插件中使用public-ip来获取公网IP。下面是在一个Vue组件中如何使用它的例子: <template…...
572. 另一棵树的子树
前导题:100. 相同的树 回顾一下 判断两棵二叉树相同,根结点相同 且 左子树相同 且 右子树相同。 于是判断如下: 根结点都为null,返回true根结点不都为null,返回false根结点都不为null,但是值不相同&#…...
LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略
LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略 目录 STORM系统简介 1、Co-STORM 2、更新新闻 STORM系统安装和使用方法 1、安装 pip安装 直接克隆GitHub仓库 2、模型和数据集 两个数据集 FreshWiki数据集 WildSeek数据集 支持…...
菜鸟之路Day11-12一一集合进阶(四)
菜鸟之路Day11-12一一集合进阶(四) 作者:blue 时间:2025.1.29-1.30 文章目录 菜鸟之路Day11-12一一集合进阶(四)0.概述1.可变参数2.Collections3.综合练习4.不可变的集合5.Stream流 0.概述 内容学习自黑…...
在Ubuntu下编译VLC
参考链接: https://blog.csdn.net/zyhse/article/details/113662686...
python开发,最好的环境是什么
目录 1. 集成开发环境(IDE) 1.1 PyCharm 1.2 Visual Studio Code (VSCode) 2. 文本编辑器 2.1 Sublime Text 2.2 Vim/NeoVim 3. 虚拟环境管理 4. 版本控制与协作 5. 容器化开发 6. 项目管理与依赖管理工具 7. 单元测试与调试 最佳组合推荐 …...
Maui学习笔记- SQLite简单使用案例02添加详情页
我们继续上一个案例,实现一个可以修改当前用户信息功能。 当用户点击某个信息时,跳转到信息详情页,然后可以点击编辑按钮导航到编辑页面。 创建项目 我们首先在ViewModels目录下创建UserDetailViewModel。 实现从详情信息页面导航到编辑页面…...
创建前端项目的方法
目录 一、创建前端项目的方法 1.前提:安装Vue CLI 2.方式一:vue create项目名称 3.方式二:vue ui 二、Vue项目结构 三、修改Vue项目端口号的方法 一、创建前端项目的方法 1.前提:安装Vue CLI npm i vue/cli -g 2.方式一&…...
好用的AI/解析网站
文件解析 json文件解析:http://www.yunjson.com/jsoncheck/...
C语言练习(31)
有5个学生,每个学生有3门课程的成绩,从键盘输入以上数据(包括学号、姓名、3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。 设5名学生的学号、姓名和3门课程成绩如下&am…...
《深入浅出HTTPS》读书笔记(31):HTTPS和TLS/SSL
《深入浅出HTTPS》读书笔记(31):HTTPS和TLS/SSL TLS/SSL协议和应用层协议无关,它只是加密应用层协议(比如HTTP)并传递给下层的TCP。 HTTP和TLS/SSL协议组合在一起就是HTTPS, HTTPS等…...
SpringBoot AOP 和 事务
SpringBoot 整合 AOP 动态代理技术 JDK 动态代理 JDK 动态代理是 Java 自带的一种代理方式。它要求目标类必须有接口,基于这个接口,JDK 在运行时会动态生成一个代理对象。这个代理对象和目标对象就像 “拜把子” 的兄弟,因为它们都实现了相同…...
如何使用Python调用大语言模型的API接口?
以下是使用 Python 调用几种常见大语言模型 API 接口的详细步骤和示例代码: 1. 调用 OpenAI 的 GPT 模型 API OpenAI 提供了强大的 GPT 系列模型,使用其 API 需要先注册 OpenAI 账号并获取 API 密钥。 步骤: 安装openai库:pip…...
如何监控ubuntu系统某个程序的运行状态,如果程序出现异常,对其自动重启。
在Ubuntu系统中,可以通过编写脚本结合cron或systemd来监控程序的运行状态,并在程序异常时自动重启。以下是具体步骤: 方法一:使用Shell脚本和Cron 编写监控脚本 创建一个Shell脚本来检查程序是否运行,并在程序异常时重…...
Kafka 压缩算法详细介绍
文章目录 一 、Kafka 压缩算法概述二、Kafka 压缩的作用2.1 降低网络带宽消耗2.2 提高 Kafka 生产者和消费者吞吐量2.3 减少 Kafka 磁盘存储占用2.4 减少 Kafka Broker 负载2.5 降低跨数据中心同步成本 三、Kafka 压缩的原理3.1 Kafka 压缩的基本原理3.2. Kafka 压缩的工作流程…...
启元世界(Inspir.ai)技术浅析(二):深度强化学习
深度强化学习(Deep Reinforcement Learning, DRL)是启元世界在人工智能领域的一项核心技术,广泛应用于游戏AI、智能决策等领域。 一、状态(State) 1.1 概念与作用 **状态(State)**是指智能体对环境的感知,是智能体进行决策的基础。在深度强化学习中,状态通常是一个高…...
在K8s中部署动态nfs存储provisioner
背景 之前,我已经在一台worker node上安装了local lvm 的provisioner来模拟需要本地高IOPS的数据库等stafeful应用的实现。 为了后续给虚拟机里的K8s集群安装可用的metrics和logs监控系统(metrics和logs的时序数据库需要永久存储)࿰…...
SQL注入漏洞之绕过[前端 服务端 waf]限制 以及 防御手法 一篇文章给你搞定
目录 绕过手法 前端代码绕过 后端代码绕过 各种字段进行验证 union 大小写绕过 双写逃过 强制类型判断 引号特殊编码处理。 内联注释绕过 注释符绕过 or/and绕过 空格绕过 防御SQL注入的方法 使用预编译语句 使用存储过程 检查数据类型 绕过手法 前端代码绕过…...
C++ 写一个简单的加减法计算器
************* C topic:结构 ************* Structure is a very intersting issue. I really dont like concepts as it is boring. I would like to cases instead. If I want to learn something, donot hesitate to make shits. Like building a house. Wh…...
Effective C++ 规则50:了解 new 和 delete 的合理替换时机
1、背景 在 C 中,new 和 delete 是动态分配内存的核心操作符。然而,直接使用它们有时会增加程序的复杂性,甚至导致内存泄漏和其他问题。因此,了解何时替换 new 和 delete 并选择更适合的内存管理策略,是编写高效、健壮…...
水果实体店品牌数字化:RWA + 智能体落地方案
一、方案背景 随着数字化技术的迅猛发展,实体零售行业正面临前所未有的挑战与机遇。传统的零售模式难以满足消费者对个性化、便捷化、智能化的需求,尤其是在水果等生鲜商品领域,如何通过技术手段提升运营效率、增强顾客体验、拓宽盈利模式&a…...
Docker小游戏 | 使用Docker部署FC-web游戏模拟器
Docker小游戏 | 使用Docker部署FC-web游戏模拟器 前言一、项目介绍项目简介项目预览二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署FC-web游戏模拟器下载镜像创建容器检查容器状态检查服务端口安全设置四、访问FC-web游戏模拟器试玩游戏FC游戏的操作方法…...
【视频+图文详解】HTML基础3-html常用标签
图文教程 html常用标签 常用标签 1. 文档结构 <!DOCTYPE html>:声明HTML文档类型。<html>:定义HTML文档的根元素。<head>:定义文档头部,包含元数据。<title>:设置网页标题,浏览…...
年化19.3%策略集|ctpbee_api替换成openctp整合backtrader实盘方案(代码+数据)
原创内容第782篇,专注量化投资、个人成长与财富自由。 昨天我们把backtraderctpbee的实盘整合代码跑通了,年化19.3%,回撤仅8%的实盘策略,以及backtrader整合CTPBee做实盘(附python代码和数据) 这两周我们加…...
谭浩强C语言程序设计(3) 7章
1、递归实现N的阶乘 c复制 #include <cstdio> // 包含标准输入输出库// 计算n的阶乘 int total 0; // 定义全局变量total用于存储阶乘结果// 递归函数计算阶乘 int fac(int a){// 如果输入的数小于0,输出错误信息if (a < 0){printf("%d < 0,err…...
国产SiC碳化硅功率器件技术成为服务器电源升级的核心引擎
在服务器电源应用中,国产650V碳化硅(SiC)MOSFET逐步取代传统超结(Super Junction, SJ)MOSFET,其核心驱动力源于SiC材料在效率、功率密度、可靠性和长期经济性上的显著优势,叠加产业链成熟与政策…...
深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据 一、服务器如何响应前端请求 前端与后端的交互主要通过 HTTP 协议实现。以下是详细步骤: 1. 前端发起 HTTP 请求 GET 请求:用于从服务器获取数据。POST 请求:用…...
深度学习指标可视化案例
TensorBoard 代码案例:from torch.utils.tensorboard import SummaryWriter import torch import torchvision from torchvision import datasets, transforms# 设置TensorBoard日志路径 writer SummaryWriter(runs/mnist)# 加载数据集 transform transforms.Comp…...
unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等
目录 1 场景数量 SceneManager.sceneCount 2 直接代码生成新场景 SceneManager.CreateScene 3 场景的加载 3.1 用代码加载场景,仍然build setting里先加入配置 3.2 卸载场景 SceneManager.UnloadSceneAsync(); 3.3 同步加载场景 SceneManager.LoadScene 3.3.…...
网易云音乐歌名可视化:词云生成与GitHub-Pages部署实践
引言 本文将基于前一篇爬取的网易云音乐数据, 利用Python的wordcloud、matplotlib等库, 对歌名数据进行深入的词云可视化分析. 我们将探索不同random_state对词云布局的影响, 并详细介绍如何将生成的词云图部署到GitHub Pages, 实现数据可视化的在线展示. 介绍了如何从原始数据…...
Web-3.0(Solidity)基础教程
Solidity 是 以太坊智能合约编程语言,用于编写 去中心化应用(DApp)。如果你想开发 Web3.0 应用,Solidity 是必学的。 Remix - Ethereum IDE(在线编写 Solidity) 特性Remix IDEHardhat适用场景适合 初学者 …...
android获取EditText内容,TextWatcher按条件触发
android获取EditText内容,TextWatcher按条件触发 背景:解决方案:效果: 背景: 最近在尝试用原生安卓实现仿element-ui表单校验功能,其中涉及到EditText组件内容的动态校验,初步实现功能后&#…...
题单:冒泡排序1
题目描述 给定 n 个元素的数组(下标从 1 开始计),请使用冒泡排序对其进行排序(升序)。 请输出每一次冒泡过程后数组的状态。 要求:每次从第一个元素开始,将最大的元素冒泡至最后。 输入格式…...
我的毕设之路:(2)系统类型的论文写法
一般先进行毕设的设计与实现,再在现成毕设基础上进行描述形成文档,那么论文也就成形了。 1 需求分析:毕业设计根据开题报告和要求进行需求分析和功能确定,区分贴合主题的主要功能和拓展功能能,删除偏离无关紧要的功能…...
JVM_类的加载、链接、初始化、卸载、主动使用、被动使用
①. 说说类加载分几步? ①. 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 第一过程的加载(loading)也称为装载验证、准备、解析3个部分统称为链接(Linking)在Java中数据类型分为基本数据类型和引用数据…...
数论问题79一一研究成果
(豆包智能搜索一一李扩继) 李扩继是一位在数学研究尤其是哥德巴赫猜想研究领域有一定成果的中学老师,以下是关于他的具体介绍: ①研究经历:2006年承担咸阳市教研室的立项课题《角谷猜想的研究》,虽未完成角谷猜想的证明ÿ…...
【DeepSeek-V3】AI Model Evaluation Framework and index schedule AI模型能力评价指标及对比
文章目录 AI 模型评估体系 | AI Model Evaluation Framework1. 模型架构信息 | Model Architecture Information2. 英语能力评估 | English Language Proficiency3. 编程能力评估 | Programming Capability Metrics4. 数学能力评估 | Mathematical Capability Assessment5. 中文…...