一、Opencv常用库文件的作用
1.cxcore:基础数据结构,数组结构,动态内存结构,绘图函数等
Cv:图像处理,结构分析,运动分析目标跟踪,模式识别,摄像头定标等
ML:机器学习(聚类,分类等)
HighGUI:图像显示,视频读取等
CvCam:摄像头接口(废除)
Cvaux:辅助性的不成熟的算法
二、Opencv读取视频
1.获取视频文件头信息 CvCapture* cvCreateFileCapture(char*);
获取文件信息,并分配一帧图像的内存.
2. 从摄像头或者文件中抓取并返回一帧
IplImage* cvQueryFrame(CvCapture*);
3.创建窗口并显示 void cvNamedWindow(char*);
void cvShowImage(char*,IplImage*);
4.释放内存 void cvReleaseCapture(CvCapture*);
void cvDestroyWindow(char*);
注意:问题:CvCapture指针返回空,有可能是没有安装解码器。
三、常用函数
1.获取视频文件属性:doublecvGetCaptureProperty(Capture*,int);
CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳
CV_CAP_PROP_POS_FRAMES- 将被下一步解压/获取的帧索引,以0为起点
CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
CV_CAP_PROP_FRAME_WIDTH - 视频流中的帧宽度
CV_CAP_PROP_FRAME_HEIGHT - 视频流中的帧高度
CV_CAP_PROP_FPS - 帧率
CV_CAP_PROP_FOURCC - 表示codec的四个字符
CV_CAP_PROP_FRAME_COUNT- 视频文件中帧的总数
2.修改视频播放的属性:cvSetCaptureProperty(Capture*,int,double);
3.创建跟踪条:
int cvCreateTrackbar(
const char* trackbar_name,
const char* window_name,
int* value,
int count,
CvTrackbarCallback on_change);
四、示例程序
#include "stdafx.h"
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
char*name = "D:\\我的文档\\Visual Studio2010\\Projects\\cv_read_video\\cv_read_video\\friend.avi";
CvCapture* cap = NULL;
intg_pos = 0;
voidon_change(int pos)
{
cvSetCaptureProperty(cap,CV_CAP_PROP_POS_FRAMES,pos);
}
intmain()
{
cvNamedWindow("window");
cap =cvCreateFileCapture(name); //CvCreateFileCapture函数,获取视频信息的数据结构指针,并开辟空间
int max = (int)cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_COUNT);//cvGetCaptureProperty函数获取视频的具体信息
cvCreateTrackbar("bar","window",&g_pos,max,on_change);//cvCreateTrackbar函数创建Trackbar
IplImage*frame = cvQueryFrame(cap); //cvQuery函数,读取下一祯
while(1)
{
cvShowImage("window",frame);
cvSetTrackbarPos("bar","window",g_pos);
g_pos++;
frame= cvQueryFrame(cap);
char key = cvWaitKey(20); //cvWaitKey控制帧率
if(key == 27) //判断是否是ESC键
{
break;
}
}
cvReleaseCapture(&cap);
cvDestroyWindow("window");
return 0;
}