【问题标题】:opencv qt display Videoopencv qt 显示视频
【发布时间】:2013-10-07 12:58:51
【问题描述】:

此代码用于在 Visual Studio 中使用 opencv 显示视频

我一直在到处寻找如何使用 Qt 和 opencv 来显示视频的教程 但我找不到任何:/

这里有人知道怎么做吗?

#include <opencv\highgui.h>
#include <opencv\cv.h>

int main(int argc, char** argv)
{
CvCapture* capture1 = cvCreateFileCapture("c:\\VideoSamples\\song.avi"); 
IplImage* frame1;
cvNamedWindow( "display video1", CV_WINDOW_AUTOSIZE ); 


while(1) 
 {
 frame1 = cvQueryFrame( capture1 ); 
 cvSmooth( frame1, out, CV_GAUSSIAN, 17, 17 );
 if( !frame1 ) break;
 cvShowImage( "display video1", frame1 ); 

 char c = cvWaitKey(33);
 if( c == 27 ) break; 
 }
 cvReleaseCapture( &capture1 );
 cvDestroyWindow( "display video1" ); 
 }

【问题讨论】:

  • 你确定must是Qt吗? IE。 highgui 还不足以满足您的目的吗?
  • 我现在是一名正在实习的学生。我的老板要求我使用 openCV 和 Visual Studio 显示视频后,他让我使用 QT 而不是 Visual Studio:/

标签: c++ qt opencv


【解决方案1】:

对于初学者,您必须确保您使用的 OpenCV 库是使用 Qt 支持构建的。

您可能需要下载源代码(在Github 上可用),使用CMake 配置构建,然后自己重​​新构建它们。 Here 是关于如何从源代码构建 OpenCV 库的指南的链接。

完成后,this 是一个示例,说明如何使用 Qt 框架从相机捕获帧(只需将相机与文件交换为您的案例)并将帧显示到窗口。

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    您可以轻松地在 QLabel 中显示 cv::Mat:

    假设帧是您当前的 8 位深度的 RGB 视频帧作为 cv::Mat-object 并且标签是指向您的 QLabel 的指针:

    //convert to QPixmap:
    QPixmap pixmap = QPixmap::fromImage(QImage((uchar*)frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888));
    
    //set scaled pixmap as content:
    label->setPixmap(pixmap.scaled(frame.cols, frame.rows, Qt::KeepAspectRatio));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 2012-07-30
      相关资源
      最近更新 更多