我想播放视频
如何使用opencv完成?
答案 0 :(得分:2)
我正在使用our previous conversation中的代码构建一个最小示例,该示例演示了如何从相机中检索帧并将其显示在QLabel
中。
请注意,传递给cvCreateCameraCapture()
的值可能会在您的系统上发生变化。在我的Linux上0
是神奇的数字。在Windows和Mac上,我使用-1
。
为简单起见,我只是分享main()
函数的主体:
int main(int argc, char** argv)
{
QApplication app(argc, argv);
CvCapture* capture = cvCreateCameraCapture(0); // try -1 or values > 0 if your camera doesn't work
if (!capture)
{
std::cout << "Failed to create capture";
return -1;
}
IplImage* frame = NULL;
QLabel label;
while (1)
{
frame = cvQueryFrame(capture);
if( !frame ) break;
QImage qt_img = IplImage2QImage(frame);
label.setPixmap(QPixmap::fromImage(qt_img));
label.show();
// calling cvWaitKey() is essencial to create some delay between grabbing frames
cvWaitKey(10); // wait 10ms
}
return app.exec();
}
修改强>
从相机播放视频文件或视频的过程是相同的。唯一真正改变的是cvCreateCameraCapture()
cvCreateFileCapture()
。
如果cvCreateFileCapture()
正在返回NULL
,则表示无法打开视频文件。这可能有两个原因:它没有处理视频的编解码器,或者找不到文件。
许多人在加载文件时在Windows上犯了以下错误:
capture = cvCreateFileCapture("C:\path\video.avi");
他们使用单斜杠,当他们应该使用double:
capture = cvCreateFileCapture("C:\\path\\video.avi");
如果某些事情可能失败,你必须始终检查通话的回复:
capture = cvCreateFileCapture("C:\\path\\video.avi");
if (!capture)
{
// print error message, then exit
}