#include"cv.h"
//从摄像头中读入数据
int main(int argc,char** argv)
{
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
CvCapture* capture; //初始化一个CvCapture结构的指针
if(argc==1)
{
capture=cvCaptureFromCAM(0);//如果参数为1,则从摄像头中读入数据,并返回一个CvCapture的指针
}
//注:《学习OpenCV》中此处用cvCreateCameraCapture为错
else
{
capture=cvCreateFileCapture(argv[1]);
}
assert(capture!=NULL);
//断言(assert)使用,检查capture是否为空指针,为假时程序退出,并打印错误消息
IplImage* frame;
while(1)
{
frame=cvQueryFrame(capture);
//用于将下一帧视频文件载入内存(实际是填充和更新CvCapture结构中),返回一个对应当前帧的指针
if(!frame)
break;
cvShowImage("Example1",frame);
char c=cvWaitKey(33);
if(c==27)
break; //触发ESC键退出循环,读入数据停止
}
cvReleaseCapture(&capture);//释放内存
cvDestroyWindow("Example1");
}
从这个程序就可以看出,和读入视频的程序几乎一样,相当类似。
7.1 cvCaptureFromCAM()
OpenCV中一个函数。初始化从摄像头中获取视频
CvCapture *cvCaptureFromCAM( int index );
index:要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。
一般index=0
我试了下,随便写个数都可以——可能是因为只有一个摄像头的缘故。
7.2 argv[1]——1.1有说明
首先说明一下:什么是命令行
Dos系统下,输入要运行的程序名,再输入参数:
program pram1 pram2...
argc 为 参数个数+1
argv[0] 为 "program "
argv[1] 为 "pram1 " ——argv[1]就是第一个参数
argv[2] 为 "pram2 "
命令行
就是原来称之为“DOS”的操作方式。那时的程序运行不像现在只需点点鼠标,而是需要在提示符下键入命令的,这种操作方式就叫做命令行。
当Windows95以后,DOS就退居二线了,在Win9x下点“开始-程序-MSDOS方式”、Win2000/XP/2003下在“开始-运行”窗口中输入“CMD”命令,就可以进入DOS窗口,运行行命令方式。
其实,在“开始-运行”中键入命令的方式,本身就是一种行命令方式。
总结一下:argv[1]就是程序运行时传入的第一个参数。
7.3 capture=cvCreateFileCapture(argv[1])
这里为什么是(argv[1])呢?
以前读入视频的时候,是写视频文件名。现在为什么写argv[1]呢?
我试了下,写成argv[i]都可以,但是不可以写成 capture=cvCreateFileCapture(),里面必须有一个为参数,否则提示出错。