您的位置:首页 > 编程语言 > Qt开发

4412 ARM+OpenCV +QT播放视频

2016-09-19 16:23 281 查看
// myWidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QImage>
#include <QTimer>
#include <cv.h>
#include <highgui.h>
class myWidget : public QWidget
{
Q_OBJECT
public:
myWidget(const char *filename,QWidget *parent = 0);
~myWidget();
protected:
void paintEvent(QPaintEvent *e);
private slots:
void nextFrame();
private:
CvCapture *capture;
IplImage *iplImg;
IplImage *frame;
QImage *qImg;
QTimer *timer;
};
#endif


// myWidget.cpp
#include "myWidget.h"
#include <QPainter>
#include <QPoint>
myWidget::myWidget(const char *filename,QWidget *parent /* = 0 */) : QWidget(parent)
{
capture = cvCaptureFromFile(filename);
if (capture)
{
frame = cvQueryFrame(capture);
if (frame)
this->resize(frame->width,frame->height);
qImg = new QImage(QSize(frame->width,frame->height), QImage::Format_RGB888);
iplImg = cvCreateImageHeader(cvSize(frame->width,frame->height), 8,3);
iplImg->imageData = (char*)qImg->bits();
timer = new QTimer(this);
timer->setInterval(30);
connect(timer,SIGNAL(timeout()),this,SLOT(nextFrame()));
timer->start();
}
}
myWidget::~myWidget()
{
cvReleaseImage(&iplImg);
cvReleaseCapture(&capture);
delete qImg;   delete timer;
}
void myWidget::paintEvent(QPaintEvent *e)    //paintEvent函数是重载的,目的是为了更新绘图
{
QPainter painter(this);
painter.drawImage(QPoint(0,0),*qImg);
}
void myWidget::nextFrame()
{
frame = cvQueryFrame(capture);
if (frame)
{
if (frame->origin == IPL_ORIGIN_TL)
{
cvCopy(frame,iplImg,0);
}
else
{
cvFlip(frame,iplImg,0);
}
cvCvtColor(iplImg,iplImg,CV_BGR2RGB);
this->update();
}
}


主函数里面调用

#include "myWidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
char *filename = "bike.avi";
myWidget *mw = new myWidget(filename);
mw->show();
return a.exec();
}


快捷键

加粗
Ctrl + B


斜体
Ctrl + I


引用
Ctrl + Q


插入链接
Ctrl + L


插入代码
Ctrl + K


插入图片
Ctrl + G


提升标题
Ctrl + H


有序列表
Ctrl + O


无序列表
Ctrl + U


横线
Ctrl + R


撤销
Ctrl + Z


重做
Ctrl + Y
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: