mer*_*roz 9 c c++ video opencv video-capture
使用opencv,如何将视频分割成图像序列?
我如何拆分它以使输出成为一系列图像?
kar*_*lip 12
令我惊讶的是,我在StackoverFlow上找不到这个问题的答案.
我目前正在使用OpenCV 2.1.这可能有点旧,但它就像一个魅力.程序将读取输入文件并在当前文件夹上创建一系列图像,名为*frame_xx.jpg*
#include <stdio.h>
#include <stdlib.h>
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
if (argc < 2)
{
printf("!!! Usage: ./program <filename>\n");
return -1;
}
printf("* Filename: %s\n", argv[1]);
CvCapture *capture = cvCaptureFromAVI(argv[1]);
if(!capture)
{
printf("!!! cvCaptureFromAVI failed (file not found?)\n");
return -1;
}
int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
printf("* FPS: %d\n", fps);
IplImage* frame = NULL;
int frame_number = 0;
char key = 0;
while (key != 'q')
{
// get frame
frame = cvQueryFrame(capture);
if (!frame)
{
printf("!!! cvQueryFrame failed: no frame\n");
break;
}
char filename[100];
strcpy(filename, "frame_");
char frame_id[30];
itoa(frame_number, frame_id, 10);
strcat(filename, frame_id);
strcat(filename, ".jpg");
printf("* Saving: %s\n", filename);
if (!cvSaveImage(filename, frame))
{
printf("!!! cvSaveImage failed\n");
break;
}
frame_number++;
// quit when user press 'q'
key = cvWaitKey(1000 / fps);
}
// free resources
cvReleaseCapture(&capture);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
mjv*_*mjv 10
即使在我编辑之后,这个问题看起来更像是一个"发送我代码"的需求而不是典型的StackOverflow 问题,因为OP提供了详细信息并证明他或她已经对其进行了一些真实的思考.
所以我只是给出一个"半答案"......无论如何,我只是熟悉OpenCV的机器学习模块,几乎不知道库的其余部分.;-)
简而言之,伪代码看起来应该是这样,并且实现通常需要提到的OpenCV方法.
myCapt = cvCreateFileCapture("myInput.avi") // Assuming the feed is from a file.
while (there are frames and we still want them)
cvGrabFrame(myCapt)
myImg = cvRetrieveFrame(myCapt)
// alternatively to cvGrabFrame + cvRetrieveFrame, could use cvQueryFrame()
// save the file (or do something with it...)
cvSaveImage("some_file_name_with_seq_nr", myImage)
cvReleaseCapture(capture)
Run Code Online (Sandbox Code Playgroud)
如上所述,需要大量的语法和逻辑工作(例如,确定何时停止,生成各个帧的文件名,当然正确地声明变量并使用正确的间接级别w /所有指针;-) .当然,如果使用Python界面,其中一些变得更容易.
在阅读和写作图像和视频 OpenCV的文档页面,提供个人方法的更详细信息.