0

此代码使用带有 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" ); 
 }
4

2 回答 2

0

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

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

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

希望这对您有所帮助。

于 2013-10-07T13:15:25.553 回答
0

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

假设帧是您当前的 RGB 视频帧,具有 8 位深度作为 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));
于 2018-10-01T15:59:11.430 回答