成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解 QT 框架中快速應用OpenCV 基于視頻播放 下篇

移動開發
OpenCV 輕量級而且高效,由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。

QT 框架中快速應用OpenCV 基于視頻播放是本篇介紹的內容,接著上篇文章繼續介紹,詳解 QT 框架中快速應用OpenCV 基于圖片 上篇,希望上篇文章對你有幫助,那么先來看本篇文章!

有些時候我們需要的是處理視頻文件,比如AVI,當然也不過是圖像序列。在由于QT運行時的多線程機制導致sleep函數不好使,可以通過其提供的QTimer來控制視頻文件的播放。在給出例子之前要羅嗦兩句QT的信號/槽機制。MFC里面的消息映射固然很快,但是讓一個涉其未深的人閱讀起來會覺得很晦澀,QT通過signal/slot機制實現了消息交換。用signal喚起slot,比如點擊了button的clicked()事件是一個signal,當這個事件發生之后可以喚起其他的操作,只要你將clicked消息和那個實際操作的槽連接起來了。

opencv里面有函數可以方便的讀取視頻幀,如果使用Widget播放視頻,如何控制幀率是一個很巧妙的地方,我使用一個QTimer控制時間(可以理解為幀率),并周期性的喚起讀取視頻幀的操作,然后在這個操作里面對widget進行重繪,或者模仿前面的方法,用一個QImage當作共享區域,讓用來paintEvent用來顯示。

有了上面顯示圖像的基礎,我改一下上面的代碼,給出一個例子:

  1. myWidget.h  
  2. #ifndef MYWIDGET_H  
  3. #define MYWIDGET_H  
  4. #include <QtGui\QWidget> 
  5. #include <QtGui\QPaintEvent> 
  6. #include <QtGui\QImage> 
  7. #include <QtCore\QTimer> 
  8. #include <cv.h> 
  9. #include <highgui.h> 
  10. class myWidget : public QWidget  
  11. {  
  12.  Q_OBJECT  
  13. public:  
  14.  myWidget(const char *filename,QWidget *parent = 0);  
  15.  ~myWidget();  
  16. protected:  
  17.  void paintEvent(QPaintEvent *e);  
  18. private slots:  
  19.  void nextFrame();  
  20. private:  
  21.  CvCapture *capture;  
  22.  IplImage *iplImg;  
  23.  IplImage *frame;  
  24.  QImage *qImg;  
  25.  QTimer *timer;  
  26. };  
  27. #endif  
  28. myWidget.cpp  
  29. #include "myWidget.h"  
  30. #include <QtGui\QPainter> 
  31. #include <QtCore\QPoint> 
  32. myWidget::myWidget(const char *filename,QWidget *parent /* = 0 */) : QWidget(parent)  
  33. {  
  34.  capture = cvCaptureFromFile(filename);  
  35.  if (capture)  
  36.  {  
  37.   frame = cvQueryFrame(capture);  
  38.   if (frame)  
  39.    this->resize(frame->width,frame->height);  
  40.   qImg = new QImage(QSize(frame->width,frame->height),  
  41.    QImage::Format_RGB888);  
  42.   iplImg = cvCreateImageHeader(cvSize(frame->width,frame->height),  
  43.    8,3);  
  44.   iplImg->imageData = (char*)qImg->bits();  
  45.   timer = new QTimer(this);  
  46.   timer->setInterval(30);  
  47.   connect(timer,SIGNAL(timeout()),this,SLOT(nextFrame()));  
  48.   timer->start();  
  49.  }  
  50.  
  51. }  
  52. myWidget::~myWidget()  
  53. {  
  54.  cvReleaseImage(&iplImg);  
  55.  cvReleaseCapture(&capture);  
  56.  delete qImg;  
  57.  delete timer;  
  58.  
  59. }  
  60. void myWidget::paintEvent(QPaintEvent *e)  
  61. {  
  62.  QPainter painter(this);  
  63.  painter.drawImage(QPoint(0,0),*qImg);  
  64. }  
  65. void myWidget::nextFrame()  
  66. {  
  67.  frame = cvQueryFrame(capture);  
  68.  if (frame)  
  69.  {  
  70.   if (frame->origin == IPL_ORIGIN_TL)  
  71.   {  
  72.    cvCopy(frame,iplImg,0);  
  73.   }  
  74.   else  
  75.   {  
  76.    cvFlip(frame,iplImg,0);  
  77.   }  
  78.   cvCvtColor(iplImg,iplImg,CV_BGR2RGB);  
  79.   this->update();  
  80.  }  

主函數里面調用

  1. int main(int argc,char* argv[])  
  2. {  
  3.  QApplication app(argc,argv);  
  4.  char *filename = "test.avi";  
  5.  myWidget *mw = new myWidget(filename);  
  6.  mw->show();  
  7.  int re = app.exec();  
  8.  return re;  

由于接不截圖都看不出來,所以就不截圖。

后一個程序因為涉及到slots,所以添加了一個Q_OBJECT宏,編譯之前需要將myWidget.h程序moc一下

比如:

  1. moc myWidget.h –o moc_myWidget.cpp 

這樣會在目錄下生成一個.cpp文件,make的時候加到源文件里一起make,或者編譯的時候添加到源文件列表中去。

知道如何使用QT來顯示圖像和播放視頻之后,在上述代碼里面插入處理圖像的代碼就很簡單了。顯示圖像的時候在構造函數里面就可以插入處理代碼,當然也可以在paintEvent函數里面進行處理,播放視頻的時候可以在nextFrame函數里面進行處理,有些預處理可以在構造函數里面完成。

相比于MFC的代碼,QT的代碼結構看上去,很明顯,更加優美。

小結:詳解 QT 框架中快速應用OpenCV 基于視頻播放 下篇的內容介紹完了,希望本文能幫你解決問題!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-24 16:41:14

QT OpenCV 框架

2011-06-24 10:21:11

Qt phonon 多媒體

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2011-06-30 10:36:07

QT Graphics View

2011-09-06 11:08:21

QT播放器Mplayer

2011-07-05 18:40:19

QT 信號 機制

2011-06-30 10:50:39

Qt OpenCV

2011-06-28 10:03:37

Qt OpenCV qmake

2011-07-05 17:07:46

Qt 插件 模塊

2011-06-23 18:16:59

Qt Qtopia

2011-07-01 14:20:59

Qt 事件

2015-05-21 15:25:42

VLC播放器

2011-09-06 11:25:08

2011-06-30 09:46:01

QT 顯示視頻 linux

2011-09-07 16:28:46

QT WidgetQWidget

2011-08-17 14:57:31

iPhone應用視頻播放

2011-06-14 11:48:38

Webkit QT

2011-06-24 11:12:39

Qt 多線程 線程

2011-06-17 17:16:01

Qt Eclipse Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩在线观看视频网站 | av香港经典三级级 在线 | www.av在线| 在线看片网站 | 97超级碰碰 | 日韩精品激情 | 亚洲高清在线 | 成人高清视频在线观看 | 成人免费一区二区三区视频网站 | 亚洲一区二区在线电影 | 色视频免费 | 91精品国产日韩91久久久久久 | 久久久精品综合 | 在线小视频 | 中文区中文字幕免费看 | 神马久久久久久久久久 | 一级黄在线观看 | 亚洲黄色视屏 | 综合久久久久久久 | a网站在线观看 | 99精品99| 欧美一二三区 | 久久99成人| 九色国产 | 亚洲va欧美va天堂v国产综合 | 91精品久久久久久久久中文字幕 | 国产一区二区精品在线 | 国产综合视频 | 天天综合久久 | 欧美 日韩 亚洲91麻豆精品 | 香蕉视频在线播放 | 国产亚洲日本精品 | 国产毛片毛片 | 在线一区二区三区 | 欧美 日韩 国产 一区 | 欧美在线小视频 | 成人精品一区二区三区 | 在线中文字幕国产 | 小h片免费观看久久久久 | www亚洲精品 | 91人人视频在线观看 |