OpenCV 播放视频的QT

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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值