video.pro
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;
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 ) : 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();
}
}