Qt实现 结合opencv播放mp4

【海康视频SDK】linux服务器端截图与下载视频 任务描述:  给定海康摄像头的ip地址、端口、用户名、密码,要求能够在linux服务器端运行脚本,完成实时抓图,和下载近期1分钟视频的功能。 我尝试了但失败的方法: 在windows下跑通vs工程后, 用opencv-swig接口文件将其打包成python库,在进行服务器端python编写。(这个网上的链接主要有​​​​​​ Windows下Python调用海康SDK实时显示网络摄像头 、U... 阅读详情

目录

1、opencv介绍

2、效果图

3、下载并编译opencv源码,生成DLL

4、核心代码


1、opencv介绍

opencv的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库,底层代码由C++编写,拥有c++、python、java等接口。

因为其跨平台特性,被广泛运用于:人脸识别,图像处理、人机交互等领域。

2、效果图

本项目实现了通过opencv+qt播放视频的功能。其中用qt制作前端,opencv负责处理视频的解码过程。

3、下载并编译opencv源码,生成DLL

opencv下载地址:https://opencv.org/releases/

我选择的是3.4.12。点击sources下载源码。

打开cmake,编译源码出库。cmake下载地址:https://cmake.org/download/

因为我的vs是2015,然后本次的项目是基于x64编译的,所以勾选的是以上。

cmake结束后,打开OpenCV.sln。生成解决方案。

然后找到CMakeTargets。右键INSTALL,选择仅生成INSTALL

在install\x64\vc14的目录下,会有对应的bin目录和lib目录。分别存放着DLL和lib。

最后再切换到release,编译即可得到release版本的DLL。

4、核心代码

1、绘制视频图像

bool LMoviePlayer::eventFilter(QObject *e, QEvent *event)
{
	if (e == this->_widget && event->type() == QEvent::Paint)
	{
		showImage();
	}
	return QWidget::eventFilter(e, event);
}

void LMoviePlayer::showImage()
{
	QPainter painter;
	painter.begin(this->_widget);
	if(!_image.isNull())
		painter.drawImage(0, 0, _image);
	painter.end();
}

通过Qt的QPainter类提供的drawImage进行绘制。因为视频其实是一幅幅连续的图像组成,所以drawImage能够很好的显示视频的图像。

因为视频是在界面的子控件上显示的,所以需要注册事件过滤器,而不是重写paintEvent中进行。

2、opencv的Mat转QImage

void LMoviePlayer::onSendMat(cv::Mat mat)
{
	Mat matDes;
	uchar *buf = new uchar[_widget->width()*_widget->height() * 3];
	_image = QImage(buf, _widget->width(), _widget->height(), QImage::Format_RGB888);
	cv::resize(mat, matDes, Size(_image.size().width(), _image.size().height()));
	cv::cvtColor(matDes, matDes, COLOR_BGR2RGB);

	int matDesSize = matDes.cols*matDes.rows*matDes.elemSize();
	memcpy(_image.bits(), matDes.data, matDesSize);

	update();
}

mat对象通过信号槽传递而来,通过它可以获取到图像数据。因为opencv是按bgr存储像素,所以把它转换为rgb。QImage才能被绘制出来。

3、子线程读取视频,发出图像数据

void MovieWork::run()
{
	Mat mat;
	while (!_bIswork)
	{
		if(!_capture.isOpened()) continue;

		if (!_capture.read(mat)) {
			if(mat.empty()) continue;
		}
		emit sigSendMat(mat);
		QThread::msleep(40);	//25帧
	}
}

通过继承QThread,重写run方法,实现子线程对视频数据的读取,解码过程被封装在了opencv的VideoCapture类中,

将解码到的数据通过Qt特有的信号槽发送到界面绘制类进行。

4、界面绘制

LMoviePlayer::LMoviePlayer(QWidget *parent)
    : QWidget(parent)
{
	_widget = new QWidget;
	_widget->installEventFilter(this);
	_openMovieBtn = new QPushButton;
	_openMovieBtn->setText(TC("打开视频"));
	_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

	QVBoxLayout *vlayout = new QVBoxLayout;
	vlayout->setMargin(0);
	vlayout->setSpacing(5);
	vlayout->addWidget(_widget);
	vlayout->addWidget(_openMovieBtn);

	this->setMinimumSize(400, 300);
	this->setLayout(vlayout);

	_movieWork = new MovieWork(this);
	qRegisterMetaType<cv::Mat>("cv::Mat");
	connect(_movieWork, SIGNAL(sigSendMat(cv::Mat)), this, SLOT(onSendMat(cv::Mat)));
	connect(_openMovieBtn, SIGNAL(clicked()), this, SLOT(onOpenMovie()));

}

这里需要注意的是qRegisterMetaType<cv::Mat>("cv::Mat");因为这个类型不是qt自带的类型,所以需要注册,qt的信号槽才能够识别并发送出来。

界面上通过QVBoxLayout进行垂直布局,对_widget这个现实视频的子控件设置为宽、高可扩展。

以上就是opencv+qt实现视频的播放,如需要完整源代码和opencv库,可以关注我的公众号 回复 LMoviePlayer 领取。

Qt5.4.1播放视频语音文件 阅读详情

相关推荐

(三)OpenCV+Qt(Linux)——本地视频播放

环境配置 https:c//blog.youkuaiyun.com/m0_57704753/article/details/122479953 创建视频播放线程 视频播放线程.h文件 #include<QThread> #include<opencv2/opencv.hpp> using namespace cv; class PlayerThread : public QThread { Q_OBJECT public: PlayerThread(char *v

m0_57704753的博客 3265

Qt + OpenCV 简单播放MP4视频

文章目录一、设计UI与代码三、效果演示 一、设计UI与代码 简单的Ui布局设计 .pro文件添加如下: win32 { message('运行win32版本') INCLUDEPATH += E:\opencv3\opencv\sources\build\install\include\ E:\opencv3\opencv\sources\build\install\include\opencv2\ E:\open

红叶谷 wsp_1138886114的博客 3159

使用QT5和OpenCV实现图像和视频处理软件

图像和视频处理一直以来都是计算机视觉领域的重要研究内容。本文将介绍如何使用QT5和OpenCV来实现一个简单的图像和视频处理软件。我们将涉及一些基本的图像处理技术,如灰度化、均值滤波、边缘检测、伽马变换、旋转镜像、亮度调节、二值化、对比度、饱和度调节、色彩调节、图片保存和水印等。此外,我们也会介绍如何在视频中应用这些技术,包括二值化、边缘检测、灰度化、平滑、局部马赛克和缩放等。最后,我们将对软件界面进行美化,并为软件添加中英文翻译功能。

qq_38334677的博客 891

[Qt学习笔记]基于Qt+opencv的视频播放器

基于Qt+opencv的视频播放器

fengyaowuhui的博客 1240

QT实现播放mp4(附完整源码)

QT实现播放mp4(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 923

使用Qt实现MP4视频播放

在主窗口中,我们将添加一个QMediaPlayer对象和一个QVideoWidget对象,用于控制视频的播放和显示。Qt是一个跨平台的应用程序开发框架,它提供了丰富的工具和库,供开发人员创建各种类型的应用程序,包括多媒体应用程序。在上面的代码中,我们创建了一个播放按钮、一个停止按钮和一个进度条,并将它们添加到了主窗口的工具栏上。请注意,为了使上述代码能够正常工作,你需要在项目文件中添加必要的库和模块,并将视频文件添加到项目中。现在,我们已经创建了一个简单的主窗口,并将视频播放器和视频显示窗口进行了关联。

YabClass的博客 1442

使用opencv在Qt控件上播放mp4文件

文章目录简介核心代码运行结果 简介 opencv是一个开源计算机视觉库,功能非常多,这里简单介绍一下OpenCV解码播放Mp4文件,并将图像显示到Qt的QLabel上面。 核心代码 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTimer> #include "opencv2/opencv.hpp" #include <opencv2/imgproc/imgp

风声的专栏 1390

RK3568 opencv播放视频

是 OpenCV 进行视频播放的核心类,可以从文件、摄像头读取视频。基本流程是打开视频 -> 逐帧读取 ->显示 -> 监听控制播放。可以获取/设置视频属性,如帧率、宽高等。性能有限,如果对播放速度、格式兼容性有较高要求,建议结合FFmpeg或Qt 多媒体模块。

m0_49476241的博客 1792

使用OpenCV在Qt控件上播放视频

文章目录简介核心代码运行结果 代码已上传至码云:https://gitee.com/fensnote/demo_code/tree/master/qtCode/opencv_video 简介 opencv是一个开源计算机视觉库,功能非常多,这里简单介绍一下OpenCV解码播放Mp4文件,并将图像显示到Qt的QLabel上面。 核心代码 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include

fensnote的博客 983

Qt中使用OpenCV实现带有进度条的视频播放

在Qt Creator的设计模式中,打开主窗口的.ui文件。您还可以添加一些其他控件,如开始按钮、停止按钮和打开文件按钮,以提供更完整的用户界面。当您单击打开文件按钮时,将弹出一个对话框,允许您选择要播放的视频文件。一旦选择了视频文件,您可以使用播放按钮播放视频,并使用进度条控制视频的播放进度。在Qt Creator的设计模式中,连接开始按钮、停止按钮和打开文件按钮的点击事件与相应的槽函数。在本文中,我们将介绍如何在Qt应用程序中使用OpenCV库实现带有进度条的视频播放功能。步骤4:连接信号和槽。

James_CODER的博客 513

LibVLC —— Qt下OpenGL播放rtsp/rtmp流,每帧图像基于OpenCv处理

    关注 笔者 - jxd 微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O

2047

项目实战:Qt+OpenCV视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)

若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.youkuaiyun.com/qq21497936 本文章博客地址:https://blog.youkuaiyun.com/qq21497936/article/details/103235954 目录 需求 原理 注意 相关博客 Demo:OpenCVPlayer v1.0.0 运行效果 下载地址 核心类代码 入坑 入坑...

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 5万+

Qt之opencv视频播放带进度条

效果: #include "videoplayer.h" #include<opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/imgproc/imgproc.hpp" #include<QDebug> #

我不是码农的博客~~~ 5217

【OpenCV+Qt】在Qt界面中显示OpenCV的视频或摄像头图像

以一个简单的demo示范在Qt框架下显示opencv导入的视频或摄像头图像

チン昶的博客 1万+

Anolis龙蜥内核升级实战:从查询到配置的全流程指南

本文提供了一份详尽的Anolis龙蜥操作系统内核升级实战指南。文章从升级的必要性出发,逐步讲解了升级前的系统检查与备份、从官方源获取正确内核包、分步安装与验证、配置默认启动项以及升级后的功能验证与安全回滚方案。旨在帮助运维人员安全、平稳地完成内核升级,以获取性能提升、新硬件支持及重要的安全漏洞修复。

qq_27496129的博客 571

正版63棋牌源代码游戏+728游戏全套带前端源代码解析

这俩天抽时间仔细看了一下这套项目包含完整的前端、后端及后台管理系统。从上传的截图可以看出,前端基于资源目录,后端采用和,后台管理界面提供数据查询与管理功能。本篇文章将从前端结构、后端接口、数据库设计、常见 BUG 及优化方法等方面逐步拆解,并给出相应的代码示例和实践经验。

aa2031171的博客 3571

QT | 聊聊QT与直播流播放——从QMediaPlayer到Qt-AV

转载原文----:https://www.cnblogs.com/QingHuan/p/8830562.html 下面是一张自己做的图,对QT可调用的几种播放方面的开源库进行对比 Stage1:QT原生播放方式:QT QMediaPlayer 这种方式有两个优点: 无需额外的库,直接可以使用且实现方式简单,已经有大量的例子 CPU占用率低,主要使用GPU 缺点: 支持的视频格式少...

thinkpadlove的专栏 5217

第3章 信息技术服务(一)

对 第三章 《信息技术服务》中第一、二、三节 <内涵与外延、原理与组成、服务生命周期>进行总结、归纳

好好学习,天天向上的博客 733

Qt + VS2013利用Opencv实现视频播放器功能

功能实现: 1.弹窗,手动选择打开视频文件; 2.视频播放, 3.视频播放暂停,继续播放 4.快进; 5.截图 demo下载:https://download.youkuaiyun.com/download/birenxiaofeigg/12089199 头文件包含: #include <QLabel> #include <qtimer.h> #include <QFileDia...

听风雨 1188

5G-A无源物联网:深度解析“不插电“智能的底层技术原理

北京移动推出5G-A无源物联网技术,实现电动车标签"零功耗"运行。该技术通过射频能量收集(利用5G-A基站高功率信号转换为电能)和反向散射通信(调制反射信号传输数据)两大核心技术,使设备无需电池即可工作。5G-A相比4G在信号能量密度、通信速率和定位精度等方面显著提升,结合通感一体等创新技术,为无源物联网提供商用基础。该方案已在北京小区试点应用,实现电动车精准定位管理,标签寿命可达5年以上。专家预测,这项技术将大幅降低物联网部署成本,推动"万物智联"时代的到来。

通信行业老兵、物联网从业者,做一个有趣的普通人。 2009

深度学习图神经网络 (GNN) —— 处理图结构数据(六十九)

本文系统介绍了图神经网络(GNN)的核心概念、主流模型及其应用。主要内容包括: GNN基础:阐述了图结构数据的特性(节点数不定、连接不规则),以及GNN相比CNN/RNN的优势在于处理非欧式空间的图数据。 核心机制:重点讲解了消息传递框架(MPNN),通过聚合邻居信息迭代更新节点表示,并分析了GCN的归一化邻接矩阵计算和GAT的注意力权重机制。 典型模型: GCN:基于归一化邻接矩阵的特征传播 GAT:引入注意力机制区分邻居重要性 GraphSAGE:通过采样解决大图扩展性问题 GIN:理论表达能力最强的图

hello.reader 300

QT + OPENCV实现视频的播放和画框对框内运动对象的显示光流

QT + OPENCV实现视频的播放和画框对框内运动对象的显示光流 最近实验室一个项目要求我做个界面 要求实现对视频的读取,对感兴趣部分画框并且处理,我就自学了Qt和opencv实现了一下 下面是部分相关代码 videodisplayingqt.h #pragma once #include <QtWidgets/QMainWindow> #include "ui_videodisp...

qq_39377156的博客 1493

使用FSL对DTI数据进行预处理

在fsl官网我们可以看到是同时使用了AP和PA图像处理,采用的是最小二乘法将2个图像合并为1个图像。–inindex此处需要处理的是PA图像,在acq_param.txt中我们是把这个放在第一行的,此处为1,如果处理的是AP图像,则此处为2。为了校正磁场引起的畸变,对DTI的B0像分别采集了A>P和P>A的反向编码的两种B0像。即如果AP和PA只有1个B0像时,那么这里就是两行,如果各有3个B0像则这里应该是6行。假设转换后的图像为sub01_AP.nii.gz和sub01_PA.nii.gz。

weixin_52073820的博客 4839

QT+Opencv实现简单的视频播放及抓拍

原理很简单,采用opencv库cvQueryFrame函数获取一帧,然后将该帧图像在QLabel显示出来。为实现连续播放,采用定时器。 #ifndef CAMERA_H #define CAMERA_H #include &amp;lt;QtWidgets/QWidget&amp;gt; #include &amp;lt;QTimer&amp;gt; #include &amp;lt;opencv2/highgui.hpp&amp;g...

songlipeng的专栏 5290

蓝牙调试抓包工具--nRF Connect移动端 使用详细总结

摘要: nRF Connect移动端是一款功能全面的蓝牙低功耗(BLE)调试工具,支持设备扫描、多设备连接、服务/特征值查看及数据读写操作。核心功能包括实时数据通信(读取/写入/通知)、设备固件更新(DFU)以及高级工具如自动化测试和信号分析。兼容Android 4.3+和iOS设备,适用于开发调试(如ESP32/nRF52)、设备管理和数据分析。需注意设备兼容性问题(如旧安卓设备可能需关闭连续扫描),并确保数据类型匹配。配套工具链包括nRF Toolbox和nRF Connect SDK,是BLE开发的必

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2375

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 我们一起玩python之 元组和字典
下一篇: 4年饮冰,难凉热血
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值