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);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值