1.10.3 Importing VideosVideoImport VideoRead VideoExtract Frame
Version Info
Minimum Origin Version Required: Origin 93 SR0
Origin C provides the VideoReader class for reading a video file and importing frame(s) of video to matrix object(s).
To use the VideoReader class, the header file "VideoReader.h" needs to be included in your source code.
#include <..\OriginLab\VideoReader.h>
With the VideoReader class you can open a video file and get the video's properties, such as frame count, frame rate (frame per second), current position, etc. It also provides methods for seeking frame, seeking time, and reading frame(s) into matrix object(s).
The following example will create a new matrixbook, seek 10 frames into a video then load 100 frames into 100 matrix objects in the active matrixsheet by skipping every other frame.
#include <..\Originlab\VideoReader.h> // Include the header file
void Import_Video_Ex1(string strFile = "d:\\test.avi") {
MatrixLayer ml;
ml.Create("Origin"); // Create a matrixsheet for the frames
char str[MAXLINE];
VideoReader vr; // Declare a VideoReader
strcpy(str, strFile);
if(!vr.Open(str)) { // Open the video file
out_str("Failed to open video file!");
return;
}
// Get number of frames
int iFrameCount = (int)vr.GetFrameCount();
printf("%u frames\n",iFrameCount);
// Starting frame
int iOffset = 10;
// Specify total frames to read
int iTotalFrames = 100;
// Specify frames to skip between each read
int iSkip = 1; // Read every other frame
bool bRet = vr.SeekFrame(iOffset);
vr.ReadFrames(ml, iTotalFrames, iSkip); // Read frames
if(vr.ReaderReady()) {
vr.Close(); // Close the video reader
}
}
In this example, time is used as the metric by which we seek and import with time skips..
#include <..\Originlab\VideoReader.h> // Include the header file
void Import_Video_Ex2(string strFile = "d:\\test.avi") {
MatrixLayer ml;
ml.Create("Origin"); // Create a matrixsheet for the frames
char str[MAXLINE];
VideoReader vr; // Declare a VideoReader
strcpy(str, strFile);
if(!vr.Open(str)) { // Open the video file
out_str("Failed to open video file!");
return;
}
// Get number of frames
int iFrameCount = (int)vr.GetFrameCount();
// Get frame rate
double dFPS = vr.GetFPS();
double dRunningTime = iFrameCount / dFPS;
printf("%u frames at %f fps with a running time of %f seconds\n",
iFrameCount, dFPS, dRunningTime);
// Setup for read
double dStartTime = 5; // Begin reading at 5 seconds
double dSkipLength = 3.333; // Skip 3.333 seconds between reads
vr.SeekFrame((int) dStartTime * dFPS); // Calculate frame start
int iSkip = (int) dSkipLength * dFPS; // Calculate frames to skip
// Calculate number of frames to actually read
int iTotalFrames = (int) ( (dRunningTime - dStartTime) * dFPS)
/ (iSkip + 1);
vr.ReadFrames(ml, iTotalFrames, iSkip); // Read frames
if(vr.ReaderReady()) {
vr.Close(); // Close the video reader
}
}
|