本帖最后由 三水 于 2011-9-29 22:02 编辑
第一段测试代码
#include "stdafx.h"
#include <iostream>
#include <cv.h>
//#include <cvaux.h>
#include <cxcore.h>
#include <highgui.h>
#include <string>
using namespace std;
int main()
{
IplImage *frame = NULL;
CvCapture *capture = NULL;
capture = cvCaptureFromAVI("D:\\123\\1.AVI");
frame = cvQueryFrame(capture);
cvNamedWindow("frame");
while(frame){
cvShowImage("frame", frame);
cvWaitKey(20);
cout << "Frame Grabbed." << endl;
frame = cvQueryFrame(capture);
}
return 0;
}
运行后界面显示如下
前面的不再做过多解析@@
其实我也想不起来了,四天没碰。。浪费时间啥也没记住。。
cvCaptureFromAVI()通过参数读入AVI文件及其所有信息并返回一个CvCapture指针,对人AVI视频时参数为该指针的cvQueryFrame()将为图像分配内存,与图像显示不同,不需要cvLoadImage为图像分配内存。CvCapture被释放后,每一帧图像的内存空间也将被释放。
cout函数让图像播放时将不断输出 Frame Grabbed.
第二段测试代码
#include "stdafx.h"
#include <iostream>
#include <cv.h>
#include <cvaux.h>
#include <cxcore.h>
#include <highgui.h>
#include <string>
// 使用标准命名空间
using namespace std;
CvCapture* g_capture1 = NULL;
int main(int argc, char** argv )
{
// 建立播放窗口
cvNamedWindow( "Video Test 1", CV_WINDOW_AUTOSIZE );
// 捕捉视频文件
argv[1]="D:\\123\\1.avi";
g_capture1 = cvCreateFileCapture( argv[1] );
// 开始播放并保存视频
IplImage* frame1;
while(1)
{
// 获取、显示源文件的帧画面
frame1 = cvQueryFrame( g_capture1 );
if( !frame1 ) break;
cvShowImage( "Video Test 1", frame1 );
// 若按下 ESC 键,则退出程序
char c = cvWaitKey(33);
if( c==27 ) break;
}
// 释放内存,关闭窗口
cvReleaseCapture( &g_capture1 );
cvDestroyWindow( "Video Test 1" );
return 0;
}
下面段函数我电脑上运行不出结果。。待解决
// test2_video.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <cv.h>
//#include <cvaux.h>
#include <cxcore.h>
#include <highgui.h>
// 使用标准命名空间
using namespace std;
// 初始化进度条的位置
int g_slider_position1 = 0;
int g_slider_position2 = 0;
CvCapture* g_capture1 = NULL;
CvCapture* g_capture2 = NULL;
// 定义回调函数用于播放进度的控制
void onTrackbarSlide1( int pos1 )
{
cvSetCaptureProperty( g_capture1, CV_CAP_PROP_POS_FRAMES, pos1 );
}
void onTrackbarSlide2( int pos2 )
{
cvSetCaptureProperty( g_capture2, CV_CAP_PROP_POS_FRAMES, pos2 );
}
int main(int argc, char** argv )
{
// 建立播放窗口
cvNamedWindow( "Video Test 1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Video Test 2", CV_WINDOW_AUTOSIZE );
// 捕捉视频文件
g_capture1 = cvCreateFileCapture( argv[1] );
g_capture2 = cvCreateFileCapture( argv[2] );
// 读取、显示视频文件的帧数
int frames1 = (int) cvGetCaptureProperty( g_capture1, CV_CAP_PROP_FRAME_COUNT );
cout << "frames1 = " << frames1 << endl;
// 建立进度条
if( frames1 != 0 )
cvCreateTrackbar(
"Position",
"Video Test 1",
&g_slider_position1,
frames1,
onTrackbarSlide1
);
int frames2 = (int) cvGetCaptureProperty( g_capture2, CV_CAP_PROP_FRAME_COUNT );
cout << "frames2 = " << frames2 << endl;
if( frames2 != 0 )
cvCreateTrackbar(
"Position",
"Video Test 2",
&g_slider_position2,
frames2,
onTrackbarSlide2
);
// 读取视频文件信息
double fps1 = (int) cvGetCaptureProperty( g_capture1, CV_CAP_PROP_FPS );
double fps2 = (int) cvGetCaptureProperty( g_capture2, CV_CAP_PROP_FPS );
CvSize size1 = cvSize(
(int)cvGetCaptureProperty(g_capture1, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(g_capture1, CV_CAP_PROP_FRAME_HEIGHT));
CvSize size2 = cvSize(
(int)cvGetCaptureProperty(g_capture2, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(g_capture2, CV_CAP_PROP_FRAME_HEIGHT));
// 创建 VideoWriter
CvVideoWriter* wrVideo1 = cvCreateVideoWriter(argv[3], CV_FOURCC('M','J','P','G'), fps1, size1);
CvVideoWriter* wrVideo2 = cvCreateVideoWriter(argv[4], CV_FOURCC('M','J','P','G'), fps2, size2);
int frs = 0;
// 开始播放并保存视频
IplImage* frame1;
IplImage* frame2;
while( frs < frames1 && frs < frames2 )
{
// 获取、显示源文件的帧画面
frame1 = cvQueryFrame( g_capture1 );
if( !frame1 ) break;
cvShowImage( "Video Test 1", frame1 );
frame2 = cvQueryFrame( g_capture2 );
if( !frame2 ) break;
cvShowImage( "Video Test 2", frame2 );
// 保存:将当前帧写入到目标视频文件
cvWriteFrame( wrVideo1, frame1 );
cvWriteFrame( wrVideo2, frame2 );
// 若按下 ESC 键,则退出程序
char c = cvWaitKey(33);
if( c==27 ) break;
}
// 释放内存,关闭窗口
cvReleaseCapture( &g_capture1 );
cvReleaseCapture( &g_capture2 );
cvReleaseVideoWriter( &wrVideo1 );
cvReleaseVideoWriter( &wrVideo2 );
cvDestroyWindow( "Video Test 1" );
cvDestroyWindow( "Video Test 2" );
return 0;
}
呃,先贴过来,因为太多要测试的,边测试边写
|