OpenCV编程入门:视频序列操作

发布时间:2017-1-23 16:36:34 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"OpenCV编程入门:视频序列操作",主要涉及到OpenCV编程入门:视频序列操作方面的内容,对于OpenCV编程入门:视频序列操作感兴趣的同学可以参考一下。

作者:jink2005 转自:http://www.aiseminar.cn/bbs/forum.php?mod=viewthread&tid=325&extra=page%3D2 1 从视频序列获得一帧 OpenCV支持从摄像头或视频文件(AVI)中获取图像,方法如下。 摄像头采集初始化: CvCapture* capture = cvCaptureFromCAM(0); //从视频设备#0采集 复制代码 从文件采集初始化: CvCapture* capture = cvCaptureFromAVI("infile.avi"); 复制代码 采集一帧: IplImage* img = 0; if (! cvGrabFrame(capture)) { //采集一帧 printf("Could not grab a frame\n\7"); exit(0); } img = cvRetrieveFrame(capture); //提取采集到的帧 复制代码 要从多个摄像机同时获取图像,首先从每个摄像机都抓取一副图片,然后在全部结束后提取这些图片。 释放采集源: cvReleaseCapture(&capture); 复制代码 注意:采集到的图像获得的空间将被设备采集函数分配或释放,无需明确地去释放他们。 2 获得或设置帧信息 获得采集设备属性: cvQueryFrame(capture); // 此调用是获得正确的采集属性所必需的 int frameH = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT); int frameW = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH); int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); int numFrames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); 复制代码 总的帧数和只与视频文件有关。(它似乎有点工作不正常) 获得帧信息: float posMsec = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_MSEC); int posFrames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES); float posRatio = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO); 复制代码 获得采集帧的第一帧的位置到[msec]中,或得到它们(多摄像机)的索引(第一幅的索引为0)。相对位置(ratio),第一帧是0,最后一帧是1。ratio只相对于从文件采集起作用。 3 保存到视频文件 初始化视频写对象: CvVideoWriter* writer = 0; int isColor = 1; int fps = 25; // 或30 int frameW = 640; // 744 for firewire cameras int frameH = 480; // 480 for firewire cameras writer = cvCreateVideoWriter("out.avi", CV_FOURCC('P', 'I', 'M', '1'), fps, cvSize(frameW, frameH), isColor); 复制代码 其他可能的编码器代码: CV_FOURCC('P','I','M','1')    = MPEG-1 codec CV_FOURCC('M','J','P','G')    = motion-jpeg codec (does not work well) CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec CV_FOURCC('U', '2', '6', '3') = H263 codec CV_FOURCC('I', '2', '6', '3') = H263I codec CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec 复制代码 编码器代码-1将打开编码器选择窗口(在windows系统下)。 写视频文件: IplImage* img = 0; int nFrames = 50; for (i = 0; i < nFrames; i++) { cvGrabFrame(capture); // 采集一帧 img = cvRetrieveFrame(capture); // 提取获得帧 cvWriteFrame(writer, img); // 加入此帧到文件 } 复制代码 要在采集同时查看采集到的帧,可以添加如下代码: cvShowImage("mainWin", img); key = cvWaitKey(20); // 等待20ms 复制代码 注意:如果没有20ms的延时,获得的序列将显示不正常。 释放视频写对象: cvReleaseVideoWriter(&writer); 复制代码 翻译自:http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/index.html

上一篇:hdu 1195 Open the Lock
下一篇:xcode里archive无效的解决办法

相关文章

相关评论