码迷,mamicode.com
首页 > 其他好文 > 详细

【04】Opencv读视频和摄像头

时间:2015-11-20 00:25:16      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:opencv

一个简单读取视频文件代码:
#include"highgui.h"
int main()
{
	cvNamedWindow("flv");
	//结构体Cv的C是大写的  函数cv的c是小写的
	CvCapture* capture = cvCreateFileCapture("D:\\BaiduYunDownload\\2015-03-13远程关机\\远程关机.flv");
	IplImage*frame;
	while (1)
	{

		frame = cvQueryFrame(capture);//该函数读取当前帧的下一帧
		if (!frame)break;

		cvShowImage("flv",frame);

		char c = cvWaitKey(33);
		if (c == 27) //ESC的ASCII码为27
			break;
	}
	cvReleaseCapture(&capture);
	cvDestroyWindow("flv");
	return 0;
}


结构体CvCapture

   CvCapture是一个结构体,用来保存图像捕获所需要的信息

 opencv从外部捕获图像的两种方式:

   一种是从摄像头中

   一种是通过解码视频得到图像

 两种方式都必须从第一帧开始一帧一帧的按顺序获取,因此每获取一帧后都要保存相应的状态和参数

  (帧数/帧率就是在1秒钟时间里传输的图片的量,也可以理解为图形处理器每秒钟能够刷新几次,通常用fps表示

      每一帧都是静止的图象)

    比如从视频文件获取,需要保存视频文件的文件名,相应解码器的类型,下一次如果要获取将需要解码那一帧

    这些信息都保存在CvCapture结构中,每获取一帧后,这些信息都将被更新

    获取下一帧需要将新信息传给获取的api接口


函数解释:

CVAPI(CvCapture*) cvCreateFileCapture( const char* filename );

通过输入要读取的视频文件(已经转码的)的路径,然后,该函数返回一个指向CvCapture结构体的指针

CVAPI(IplImage*) cvQueryFrame( CvCapture* capture );

输入一个CvCapture类型的指针

该函数的主要功能是将视频文件的下一帧加载到内存

与cvLoadImage的不同在于该函数不重新分配内存空间


char c = cvWaitKey(33);

 当前帧被显示后,等33毫秒。如果用户触发一个按键,c被设置成这个按键的ASCII码,否则设为-1

 cvWaitKey(33)另一个作用就是控制频率

/* stop capturing/reading and free resources */
CVAPI(void) cvReleaseCapture( CvCapture** capture );

释放CvCapture结构体开辟的内存空间

关闭打开的视频文件有关的文件句柄



读取摄像头: 

/* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */
CVAPI(CvCapture*) cvCreateCameraCapture( int index );

该函数的输入参数是一个ID号 只有存在多个摄像头时才起作用

当ID=-1; 表示随机选择一个

只有一个摄像机时,参数值取0


把上述代码替换为

CvCapture* capture = cvCreateCameraCapture(0);

便可读取摄像头(本机只有一个摄像头)

本文出自 “坚持!!” 博客,请务必保留此出处http://insiston.blog.51cto.com/10295419/1714820

【04】Opencv读视频和摄像头

标签:opencv

原文地址:http://insiston.blog.51cto.com/10295419/1714820

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!