首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >录像不连续播放

录像不连续播放
EN

Stack Overflow用户
提问于 2013-08-21 09:22:58
回答 2查看 368关注 0票数 0

我正在使用opencv在Qt中播放视频。我有6个平铺的摄像机,我正在播放视频。问题是,如果其中一个视频没有播放,即结束,那么GUI冻结并退出。我遇到的错误是,您必须重新实现QApplication::QApplication()并捕获那里的异常。怎么做?我使用的代码如下所示。

在某个功能的某个地方

代码语言:javascript
复制
 void MainWindow::ActivateWindow()
{
  //Some part of code to set Index for stacked widget

   if(stackWidget->currentIndex()==9)
   {
      const int imagePeriod == 1000/25;
      imageTimer->setInterval(imagePeriod);
      connect(imageTimer,SIGNAL(timeout()),this,SLOT(demoSlot());
      imageTimer->start();
   }
}

插槽demoSlot

代码语言:javascript
复制
 void MainWindow::demoSlot()
{
   captureCamera1 cvCaptureFromFile("/root/mp.mp4");
   captureCamera2 cvCaptureFromFile("/root/mp.mp4");
   captureCamera3 cvCaptureFromFile("/root/mp.mp4");

   while(imageTimer->isActive())
   {
      frameCamera1 = cvQueryFrame(captureCamera1);
      frameCamera2 = cvQueryFrame(captureCamera2);
      frameCamera3 = cvQueryFrame(captureCamera2);

      sourceImageCam1 = frameCamera1;
      sourceImageCam2 = frameCamera2;
      sourceImageCam3 = frameCamera3;

      cv::resize(sourceImageCam1,sourceImageCam1,cv::size(400,100),0,0);
      cv::resize(sourceImageCam1,sourceImageCam1,cv::size(400,100),0,0);
      cv::resize(sourceImageCam1,sourceImageCam1,cv::size(400,100),0,0);

      cv::cvtColor(sourceImageCam1,sourceImageCam2,CV_BGR2RGB);
      cv::cvtColor(sourceImageCam2,sourceImageCam2,CV_BGR2RGB);
      cv::cvtColor(sourceImageCam2,sourceImageCam2,CV_BGR2RGB);

      QImage tempImage1 = QImage((const unsigned char* sourceImageCam1.data,sourceImageCam1.cols,sourceImageCam2.rows,QImage::Format_RG888);
      QImage tempImage2 = QImage((const unsigned char* sourceImageCam2.data,sourceImageCam2.cols,sourceImageCam2.rows,QImage::Format_RG888);
      QImage tempImage3 = QImage((const unsigned char* sourceImageCam3.data,sourceImageCam3.cols,sourceImageCam3.rows,QImage::Format_RG888);

      labelCameraCapture1->setPixmap(QPixmap::fromImage(tempImage1));     //label to display video
      labelCameraCapture2->setPixmap(QPixmap::fromImage(tempImage2));
      labelCameraCapture3->setPixmap(QPixmap::fromImage(tempImage3));

      lblCameraCapture1->resize(lblCameraCapture1->Pixmap->size());
      lblCameraCapture1->resize(lblCameraCapture1->Pixmap->size());
      lblCameraCapture1->resize(lblCameraCapture1->Pixmap->size());

      cvWaitkey(20);
      qApp->processEvents();
    }
 if(imageTimer->isActive())
 {
   imageTimer->stop();
 }
 else
 {
   imageTimer->start();
 }
}

在头文件中

代码语言:javascript
复制
   cvCapture *captureCamera1;
   cvCapture *captureCamera1;
   cvCapture *captureCamera1;

   IplImage frameCamera1;
   IplImage frameCamera2;
   IplImage frameCamera3;

   cv::Mat sourceImageCam1;
   cv::Mat sourceImageCam2;
   cv::Mat sourceImageCam3;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-21 21:02:46

这将做的窍门,改变成3部电影是简单的。

代码语言:javascript
复制
class MainWindow : public QMainWindow {
Q_OBJECT

   explicit QMainWindow(QWidget *parent) ....
   // prepare timer and so on

public slots:
   void startVideo() {
      vid1.close();
      vid1.open("/root/mp.mp4");
      imageTimer->start();
   }

   void demoSlot() {
      cv::Mat frame;
      vid1 >> frame;
      cv::cvtColor(frame,frame,CV_BGR2RGB);
      QImage img((uchar*) frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);
      label1->setPixmap(QPixmap::fromImage(img));
   }

private:
   ...
   QTimer *imageTimer;
   cv::VideoCapture vid1;
};
票数 1
EN

Stack Overflow用户

发布于 2013-08-21 20:15:47

检查从摄像机中捕获的帧是否为空。然后简单地跳过这个相机的处理步骤。

最好不要混合C++和C接口(我的意思是cv::Mat和IplImage)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18353624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档