qt+opencv显示视频流-简化版

main.cpp

#include "QTvision.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	QTvision w;
	w.show();
	return a.exec();
}

QTvision.cpp

#include "QTvision.h"
#include "ui_QTvision.h"

QTvision::QTvision(QWidget *parent)
    : QWidget(parent)
{
	ui.setupUi(this);

	timer = new QTimer(this);												
	connect(timer, SIGNAL(timeout()), this, SLOT(importFrame()));        //连接定时器 timer 的 timeout() 信号与当前对象 this 的 importFrame() 槽函数

}


void QTvision::importFrame()
{

			capture >> frame;		//从视频源获取一帧,并存到frame里
			
			if (timer->remainingTime() > 30 ) {}	//计时器间隔大于30ms的话就什么也不敢,小于30ms就亮度加点
			else 
			{
				frame.convertTo(frame, -1, 5, 0); // 将亮度增加 400%(可以根据需要调整参数)
			}

			cvtColor(frame, frame, CV_BGR2RGB);//only RGB of Qt					//将从 capture 获取到的图像数据从 BGR 格式(mat)转换为 RGB 格式(qt)
			QImage srcQImage = QImage((uchar*)(frame.data), frame.cols, frame.rows, QImage::Format_RGB888);//将转换后的 RGB 图像数据创建为 Qt 的 QImage 对象 srcQImage。其中 (uchar*)(frame.data) 是将帧数据的指针转换为 uchar* 类型,用作 QImage 的数据源。

			ui.label->setPixmap(QPixmap::fromImage(srcQImage));    //将 srcQImage 设置为 ui.label 的 pixmap,即在界面上显示图像。
			ui.label->show();										//显示标签
}
void QTvision::on_displayButton_clicked()					//播放按钮
{

	capture.open(0);

	timer->start(20);//启动定时器,并设置定时器的时间间隔为20ms, //启动定时器,时间间隔33ms,就是每隔20ms,发出一个timeout信号,与signal联系,那么帧率则是1000/20≈50帧
}

void QTvision::on_clickedButton_clicked() {

	//capture.open("C:/Users/Desktop/test.mp4");
	timer->start(80);
}

void QTvision::on_stopButton_clicked()
{

		timer->stop();		//定时器停止
	    capture.release();	//释放视频捕获对象 capture 的资源,关闭打开的视频文件或者摄像头,防止时间过长,卡顿
}



QTvision.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QTvision.h"
#include <opencv2\opencv.hpp>
#include <QTimer>
#include <QLabel>
#include<QFileDialog>
#include <QPixmap>
#include <opencv2/xphoto.hpp>
#pragma execution_character_set("utf-8")//运行字符编码要写这行,否则中文乱码

using namespace cv;

class QTvision : public QWidget 
{
	Q_OBJECT

public:
	QTvision(QWidget *parent = Q_NULLPTR);

private:	


	Ui::QTvision ui;			//声明ui界面
	VideoCapture capture;		//声明一个名为capture的VideoCapture对象
	QTimer *timer;				//声明一个QTimer类型的指针
	Mat frame;					//声明一个mat类型的frame			

	private slots:

	void importFrame();
	void on_displayButton_clicked();
	void on_stopButton_clicked();
	void on_clickedButton_clicked();
};

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值