长沙优化网站建设,网站建设方案设计,沂水网站优化,网站备案的要求是什么样的文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结 二、代码实现 一、opencv相关的类
1. cv::VideoCapture
cv::VideoCapture 是 OpenCV 中用于视频捕捉的类#xff0c;常用于从摄像头、视频文件、或者… 文章目录 一、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 格式。QImageQt 用于表示图像数据的类提供了从原始数据创建图像并显示的功能。QPixmapQt 用于显示图像的类通常用于在界面中显示图像。
这些类和函数组合在一起使得 OpenCV 能够与 Qt 无缝集成从摄像头捕获图像并显示在 Qt 界面中。
二、代码实现
#ifndef WIDGET_H
#define WIDGET_H#include QWidget
#include QLabel
#include QTimer
#include opencv2/opencv.hppQT_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 QDebugWidget::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));
}