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

10 篇文章 0 订阅

原理很简单,采用opencv库cvQueryFrame函数获取一帧,然后将该帧图像在QLabel显示出来。为实现连续播放,采用定时器。

#ifndef CAMERA_H
#define CAMERA_H

#include <QtWidgets/QWidget>
#include <QTimer>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
#include "ui_camera.h"

//namespace Ui
//{
//	class camera;
//}
class camera : public QWidget
{
	Q_OBJECT

public:
	camera(QWidget *parent = 0);
	~camera();

private Q_SLOTS:
	void OnTimerOut();
	void OnClicked();
	void OnCaptureClicked();
	void OnCaptureClose();

private:
	Ui::cameraClass ui;
	IplImage*	m_pFrame;
	QTimer*		m_pTimer;
	CvCapture*	m_pCapture;
	QImage*		m_pImage;
};

#endif // CAMERA_H
#include "camera.h"

camera::camera(QWidget *parent)
	: QWidget(parent)
	//ui(new Ui::camera)
{
	ui.setupUi(this);
	m_pCapture = NULL;
	m_pImage = new QImage();
	m_pTimer = new QTimer(this);
	connect(m_pTimer, SIGNAL(timeout()), this, SLOT(OnTimerOut()));
	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(OnClicked()));
	connect(ui.btnCapture, SIGNAL(clicked()), this, SLOT(OnCaptureClicked()));
	connect(ui.btnclose, SIGNAL(clicked()), this, SLOT(OnCaptureClose()));
}

camera::~camera()
{

}

void camera::OnClicked()
{
	m_pCapture = cvCreateFileCapture("D://learn//1.mp4");
	m_pTimer->start(33);

}

void camera::OnTimerOut()
{
	m_pFrame = cvQueryFrame(m_pCapture);
	if (m_pFrame == NULL)
		return;
	QImage image((const uchar*)m_pFrame->imageData, m_pFrame->width, m_pFrame->height, QImage::Format_RGB888);
	ui.label->setPixmap(QPixmap::fromImage(image));
}

void camera::OnCaptureClicked()
{
	m_pFrame = cvQueryFrame(m_pCapture);
	if (m_pFrame == NULL)
		return;
	QImage image((const uchar*)m_pFrame->imageData, m_pFrame->width, m_pFrame->height, QImage::Format_RGB888);
	ui.label_2->setPixmap(QPixmap::fromImage(image));
}

void camera::OnCaptureClose()
{
	m_pTimer->stop();
	cvReleaseCapture(&m_pCapture);
}

要使用QtOpenCV实现录制视频的功能,可以参考以下步骤: 1. 首先,确保你已经安装了QtOpenCV,并且配置好了开发环境。 2. 创建一个Qt项目,并在项目中包含OpenCV的头文件和库文件。 3. 在项目中创建一个Widget类,继承自QWidget,并在头文件中添加必要的成员变量和函数。 4. 在Widget类的构造函数中初始化摄像头,并设置视频的帧率、宽度和高度。 5. 创建一个定时器对象,并连接到一个槽函数readFrame(),用于读取摄像头的每一帧图像。 6. 在readFrame()函数中,使用OpenCV的VideoCapture类读取摄像头的图像,并进行帧差法处理,判断是否存在物体运动。 7. 如果存在物体运动,可以选择保存当前帧的图像或者将当前帧写入视频文件。 8. 在Widget类的析构函数中释放摄像头和定时器对象。 9. 在Qt的界面中添加一个按钮,用于开始和停止录制视频。 10. 在按钮的槽函数中,根据按钮的状态来控制录制视频的开始和停止。 以上是一个简单实现录制视频的步骤,具体的代码实现可以参考引用\[1\]中的示例代码。希望对你有帮助! #### 引用[.reference_title] - *1* *2* *3* [[视觉实战案例]Qt+OpenCV实现USB摄像头监测移动物体并录制视频功能(帧差法)](https://blog.csdn.net/fengyaowuhui/article/details/124656844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值