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

OpenCV 播放视频的QT

2016-10-02 20:44 281 查看
video.pro
#-------------------------------------------------
#
# Project created by QtCreator 2016-09-19T00:42:38
#
#-------------------------------------------------
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = video
TEMPLATE = app
SOURCES += main.cpp\
myWidget.cpp
HEADERS  += myWidget.h
FORMS    += mainwindow.ui
INCLUDEPATH += /usr/local/arm/opencv-install/include/
INCLUDEPATH += /usr/local/arm/opencv-install/include/opencv
INCLUDEPATH += /usr/local/arm/opencv-install/include/opencv2
LIBS += /usr/local/arm/opencv-install/lib/libopencv_highgui.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_legacy.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_imgproc.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_flann.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_ml.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_core.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_photo.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_contrib.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_video.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_objdetect.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_nonfree.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_calib3d.so
LIBS += /usr/local/arm/opencv-install/lib/libopencv_features2d.so


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;//highgui 里提供的一个专门处理摄像头图像的结构体
IplImage *iplImg;
IplImage *frame;//摄像头每次抓取的图像为一帧,使用该指针指向一帧图像的内存空间
QImage *qImg;
QTimer *timer;//定时器用于定时取帧,上面说的隔一段时间就去取就是用这个实现。
};
#endif


main.cpp
#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();
}


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)
{
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: