本文旨在学习如何在OpenCV中显示视频。这样做就像显示为单个图像一样,是一个简单的任务。但是在这里,必须将循环显示的帧显示作为序列的一部分。
让我们逐行详细地了解完整的过程。
代码 :
CvCapture* capture = cvCreateFileCapture("...input\\video_file.avi");
cvCreateFileCapture()函数获取视频AVI文件的名称/路径(作为参数加载)。然后返回一个指向CvCapture结构的指针。有关视频文件的所有信息都包含在此结构中。以这种方式创建时,CvCapture结构将初始化到视频的开头。
代码 :
frame = cvQueryFrame(capture);
一旦进入while(1)循环,便开始从视频文件读取数据。 cvQueryFrame()将指向CvCapture结构的指针作为参数。然后,下一个视频帧被带入内存,该内存实际上是CvCapture结构的一部分。并且该特定框架需要指针。 cvQueryFrame使用CvCapture结构中存在的已分配内存,这与cvLoadImage为图像分配实际内存不同。因此,对于此“帧”指针,不需要调用cvReleaseImage()。释放CvCapture结构时,将释放帧图像存储器。
代码 :
c = cvWaitKey(10);
if (c == 27)
break;
画面显示后等待10ms。如果用户按下特定的键,则c将被设置为所按下键的ASCII值。否则,将其设置为“ -1”。如果用户按下ESC键(ASCII值为27),则该代码将退出读取循环。否则,经过10毫秒后,将再次执行循环。
代码:使用OpenCV显示视频。
// Using OpenCV to display video
#include
#include
#include
using namespace cv;
using namespace std;
iint main(int argc, char** argv)
{
// creating window
cvNamedWindow("Display_video", CV_WINDOW_AUTOSIZE);
// loading video
CvCapture* capture = cvCreateFileCapture("..input\\tree.avi");
IplImage* frame;
while (1) {
frame = cvQueryFrame(capture);
if (!frame)
break;
cvShowImage("Display_video", frame);
char c = cvWaitKey(0);
if (c == 27)
break;
}
cvReleaseCapture(&capture);
// destroying window
cvDestroyWindow("Display_video");
}
输出 :
VIDEO OUTPUT IN THE DISPLAY WINDOW
在上面的代码中,我们实际上是以非常智能的方式控制视频的速度,我们仅依靠cvWaitKey()中的计时器来控制要加载的帧的速度。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。