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 中用于视频捕捉的类,常用于从摄像头、视频文件、或者…...

OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境
以下是在OpenEuler系统上搭建PostgreSQL高可用数据环境的一般步骤,通常可以使用流复制(Streaming Replication)或基于Patroni等工具来实现高可用,以下以流复制为例: 安装PostgreSQL 配置软件源:可以使用O…...
数学平均数应用
给定一个长度为 n 的数组 a。在一次操作中,你可以从索引 2 到 n−1中选择一个索引i,然后执行以下两个操作之一: 将 a[i−1] 减少 1,同时将 a[i1] 增加 1。 将 a[i1] 减少 1,同时将 a[i−1] 增加 1。 在每次操作后&…...

元旦和春节取名的历史变迁
在中国漫长的历史长河中的春节,真要追溯起来也只有一百多年历史——是从晚清时期才逐渐出现在国人的生活里的,而且那时不叫“春节”而叫“元旦”。只不过随着历史的发展过程,“过年”这个名词也一直在演变,直至1949年最终才定下来…...
USB鼠标的数据格式
USB鼠标的数据格式由HID(Human Interface Device)协议定义,通常包含3个字节的标准数据,具体格式如下: 字节内容描述第1字节按键状态Bit 0: 左键按下(1)<br>Bit 1: 右键按下(1…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.27 线性代数王国:矩阵分解实战指南
1.27 线性代数王国:矩阵分解实战指南 #mermaid-svg-JWrp2JAP9qkdS2A7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JWrp2JAP9qkdS2A7 .error-icon{fill:#552222;}#mermaid-svg-JWrp2JAP9qkdS2A7 .erro…...
Kafka常见问题之 java.io.IOException: Disk error when trying to write to log
文章目录 Kafka常见问题之 java.io.IOException: Disk error when trying to write to log1. 问题概述2. 问题排查方向(1)磁盘空间不足(2)磁盘 I/O 故障(3)Kafka 日志文件损坏(4)Kaf…...

libOnvif通过组播不能发现相机
使用libOnvif库OnvifDiscoveryClient类, auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误: end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…...
Flink (十二) :Table API SQL (一) 概览
Apache Flink 有两种关系型 API 来做流批统一处理:Table API 和 SQL。Table API 是用于 Scala 和 Java 语言的查询API,它可以用一种非常直观的方式来组合使用选取、过滤、join 等关系型算子。Flink SQL 是基于 Apache Calcite 来实现的标准 SQL。无论输入…...

FFmpeg(7.1版本)的基本组成
1. 前言 FFmpeg 是一个非常流行的开源项目,它提供了处理音频、视频以及其他多媒体内容的强大工具。FFmpeg 包含了大量的库,可以用来解码、编码、转码、处理和播放几乎所有类型的多媒体文件。它广泛用于视频和音频的录制、转换、流媒体传输等领域。 2. F…...
基于微信小程序的辅助教学系统的设计与实现
标题:基于微信小程序的辅助教学系统的设计与实现 内容:1.摘要 摘要:随着移动互联网的普及和微信小程序的兴起,基于微信小程序的辅助教学系统成为了教育领域的一个新的研究热点。本文旨在设计和实现一个基于微信小程序的辅助教学系统,以提高教…...

单片机基础模块学习——超声波传感器
一、超声波原理 左边发射超声波信号,右边接收超声波信号 左边的芯片用来处理超声波发射信号,中间的芯片用来处理接收的超声波信号 二、超声波原理图 T——transmit 发送R——Recieve 接收 U18芯片对输入的N_A1信号进行放大,然后输入给超声…...

HTML<hgroup>标签
例子: 使用hgroup元素标记标题和段落是相关的: <hgroup> <h2>Norway</h2> <p>The land with the midnight sun.</p> </hgroup> 定义和用法: 标签<hgroup>用于包围标题和一个或多个<p&g…...

C++并发编程指南08
以下是经过优化排版后的5.3节内容,详细解释了C中的同步操作和强制排序机制。每个部分都有详细的注释和结构化展示。 文章目录 5.3 同步操作和强制排序假设场景示例代码 5.3.1 同步发生 (Synchronizes-with)基本思想 5.3.2 先行发生 (Happens-before)单线程环境多线程…...

Spring Boot - 数据库集成03 - 集成Mybatis
Spring boot集成Mybatis 文章目录 Spring boot集成Mybatis一:基础知识1:什么是MyBatis2:为什么说MyBatis是半自动ORM3:MyBatis栈技术演进3.1:JDBC,自行封装JDBCUtil3.2:IBatis3.3:My…...

python:洛伦兹变换
洛伦兹变换(Lorentz transformations)是相对论中的一个重要概念,特别是在讨论时空的变换时非常重要。在四维时空的背景下,洛伦兹变换描述了在不同惯性参考系之间如何变换时间和空间坐标。在狭义相对论中,洛伦兹变换通常…...

“星门计划对AI未来的意义——以及谁将掌控它”
“星门计划对AI未来的意义——以及谁将掌控它” 图片由DALL-E 3生成 就在几天前,唐纳德特朗普宣布了“星门计划”,OpenAI随即跟进,分享了更多细节。他们明确表示,计划在未来四年内投资5000亿美元,在美国为OpenAI构建一…...
为什么“记住密码”适合持久化?
✅ 特性 1:应用重启后仍需生效 记住密码的本质是长期存储用户的登录凭证(如用户名、密码、JWT Token),即使用户关闭应用、重启设备,仍然可以自动登录。持久化存储方案: React Native 推荐使用 AsyncStorag…...

国产SiC碳化硅功率器件技术成为服务器电源升级的核心引擎
在服务器电源应用中,国产650V碳化硅(SiC)MOSFET逐步取代传统超结(Super Junction, SJ)MOSFET,其核心驱动力源于SiC材料在效率、功率密度、可靠性和长期经济性上的显著优势,叠加产业链成熟与政策…...

【Block总结】动态蛇形卷积,专注于细长和弯曲的局部结构|即插即用
论文信息 标题: Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation 作者: 戚耀磊、何宇霆、戚晓明、张媛、杨冠羽 会议: 2023 IEEE/CVF International Conference on Computer Vision (ICCV) 发表时间: 2023年10月…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...