Opencv视频教程分析课件_第1页
Opencv视频教程分析课件_第2页
Opencv视频教程分析课件_第3页
Opencv视频教程分析课件_第4页
Opencv视频教程分析课件_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Opencv视频教程Opencv结构与内容Opencv视频教程1Opencv结构cxcorecvMachineLearning(ML)HighGUIcvcamcvauxOpencv结构cxcore2cxcore基础结构:CvPoint,CvSize,CvScalar等数组操作:cvCreateImage,cvCreateMat等动态结构:CvMemStorage,CvMemBlock等绘图函数:cvLine,cvRectangle等数据保存和运行时类型信息:CvFileStorage,cvOpenFileStorage等错误处理和系统函数:cvGetErrStatus,cvAlloc,cvFree等cxcore3cv图像处理:cvSobel,cvCanny等结构分析:ContourArea等运动分析与目标跟踪:cvMeanShift等模式识别:CvHaarFeature摄像头定标与三维重建:cvCalibrateCamer2cv4MachineLearning(ML)包含许多聚类、分类和数据分析函数。如Bayes分类器,K近邻算法,支持向量机,决策树,神经网络等等。MachineLearning(ML)包含许多聚类、分类和5HighGUI图像界面函数:cvNamedWindow读图像和保存图像:cvLoadImage,cvSaveImage读视频和写视频:CvCreateFileCapture等HighGUI6cvcam摄像机接口,在Opencv1.0以后的版本中已经被移除cvcam7cvaux该模块中一般存放一些即将被淘汰的算法和函数(如基于嵌入式隐马尔科夫的人脸识别算法),还包含一些实验性的算法和函数(前景检测,背景剔除等)cvaux8Opencv的结构Opencv的结构9Opencv视频教程显示图像Opencv视频教程10第一个程序:显示图像基于Opencv,我们可以读取各种图像文件,视频文件,还可以读取摄像头。这些功能是Opencv开发包中HighGUI工具集的一部分。下面,我们就使用其中的一些功能来实现如何显示一幅图像。第一个程序:显示图像基于Opencv,我们可以读取各种图像文11显示图像代码#include"highgui.h"intmain(intargc,char*argv[]){ IplImage*src=cvLoadImage("F:\\psbCA2V1GZ7.jpg",1); cvNamedWindow("show_image"); cvShowImage("show_image",src); cvWaitKey(0); return0;}显示图像代码#include"highgui.h"12cvLoadImage(char*filename,intflags=CV_LOAD_IMAGE_COLOR)Filename:图像所在路径Flags:/*图像颜色不变

*/#defineCV_LOAD_IMAGE_UNCHANGED-1/*灰度图像(单通道)*/#defineCV_LOAD_IMAGE_GRAYSCALE0/*彩色图像(3通道图像)*/#defineCV_LOAD_IMAGE_COLOR1cvLoadImage(char*filename,int13cvLoadImage参数说明Flags:/*则输入图像格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型*/#defineCV_LOAD_IMAGE_ANYDEPTH2/*保持原样*/#defineCV_LOAD_IMAGE_ANYCOLOR4cvLoadImage参数说明14cvLoadImage参数说明如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR

如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_GRAYSCALE|CV_LOAD_IMAGE_COLOR将载入单通道图。

cvLoadImage参数说明如果想要载入最真实的图像,选择15cvLoadImage的功能通过文件名确定被加载图像的格式,并且该函数在内部分配图像数据结构所需要的内存空间。支持的图像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS,TIFF。cvLoadImage的功能16IntcvNamedWindow(char*name,intflagsname:窗口的标志。如果已经有同名窗口,则该函数什么也不干。Flags:CV_WINDOW_AUTOSIZE,会根据图像大小自动调整窗口大小。如果是0,则窗口大小不变。IntcvNamedWindow(char*name,in17cvShowImage(char*name,IplImage*dst)功能:在指定窗口上显示图像。name:窗口的标志。这个标志是cvNamedWindow函数设定的。dst:被显示的图像。cvShowImage(char*name,IplImag18IntcvWaitKey(intkey)Key:如果key的值是大于0的数,那么该函数的功能是,在此处暂停key毫秒。如果是小于等于0的数,那么,该函数是在等待用户的按键输入。IntcvWaitKey(intkey)Key:如果ke19cvReleaseImage(IplImage**src)释放图像空间。cvReleaseImage(IplImage**src)20cvDestroyWindow(char*name)注销一个窗口。同时释放为该窗口所分配的所有内存(包括窗口内部的图像内存缓冲区)cvDestroyWindow(char*name)注销一21Opencv视频教程Opencv读取视频Opencv视频教程22Opencv读取视频代码#include"highgui.h"intmain(intargc,char*argv[]){ cvNamedWindow("avi"); CvCapture*capture=cvCreateFileCapture(“视频文件路径"); IplImage*frame; while(1) { frame=cvQueryFrame(capture); if(!frame)break; cvShowImage("avi",frame); charc=cvWaitKey(33); if(c==27) break; } cvReleaseCapture(&capture); cvDestroyWindow("avi"); return0;}Opencv读取视频代码#include"highgui.23结构体CvCaptureCvCapture是一个结构体,用来保存图像捕获所需要的信息。opencv提供两种方式从外部捕获图像一种是从摄像头中,一种是通过解码视频得到图像。两种方式都必须从第一帧开始一帧一帧的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。比如从视频文件中获取,需要保存视频文件的文件名,相应的解码器类型,下一次如果要获取将需要解码哪一帧等。这些信息都保存在CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧需要将新信息传给获取的api接口结构体CvCaptureCvCapture是一个结构体,用24cvCreateFileCapture(char*name)通过输入要读取的avi文件的路径,然后,该函数返回一个指向CvCapture结构体的指针。cvCreateFileCapture(char*name)25cvQueryFrame(capture)输入一个CvCapture类型的指针,该函数主要功能是将视频文件的下一帧加载到内存。与cvLoadImage的不同之处是,该函数不重新分配内存空间。cvQueryFrame(capture)输入一个CvCap26C=cvWaitKey(33)当前帧被显示后,等待33毫秒。如果用户触发了一个按键,c会被设置成这个按键的ASCII码,否则会被设置成-1。cvWaitKey(33)在此处的另外一个作用是,控制帧率。C=cvWaitKey(33)当前帧被显示后,等待33毫秒。27cvReleaseCapture(&capture)释放为CvCapture结构体开辟的内存空间关闭打开的AVI文件相关的文件句柄cvReleaseCapture(&capture)28读取摄像头只需把cvCreateFileCapture改成cvCreateCameraCapture即可。该函数的输入参数是一个ID号,只有存在多个摄像头时才起作用。当ID=-1时,表示随机选择一个。HighGUI做了很多工作,使得摄像机图像序列像一个视频文件一样。在第4章,会有更详细的介绍。读取摄像头29总结总结30常见问题(1)视频文件路径没写对(2)没有安装解码器(3)如果使用的是Opencv2.0或更高版本,那么,能否正确加载opencv_ffmpeg210.dll(4)尽管是AVI文件,但也可能使用了某种codec,例如:MJPEGDecompressor。需要把它转换OpenCV支持的AVI文件.OpenCV支持的AVI。例如使用狸窝全能视频转换器,在《预置方案》处,选择AVI-Audio_VideoInterleaved(*.avi)。或者使用格式工厂也可以。(5)读摄像头数据,需要安装与摄像头相应的驱动程序。常见问题(1)视频文件路径没写对31Opencv视频教程视频播放控制Opencv视频教程32获取摄像头属性的函数doublecvGetCaptureProperty(CvCapture*capture,intproperty_id)

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-视频文件中帧的总数获取摄像头属性的函数doublecvGetCaptureP33一个bug有时候函数cvGetCaptureProperty在cvQueryFrame被调用一次后,再调用cvGetCaptureProperty才会返回正确的数值。这是一个bug,建议在调用此函数前先调用cvQueryFrame。

一个bug有时候函数cvGetCaptureProperty34设置摄像头属性的函数intcvSetCaptureProperty(CvCapture*capture,intproperty_id,doublevalue);

capture视频获取结构。

property_id属性标识符。可以是下面之一:

CV_CAP_PROP_POS_MSEC-从文件开始的位置,单位为毫秒

CV_CAP_PROP_POS_FRAMES-单位为帧数的位置(只对视频文件有效)

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的四个字符(只对摄像头有效)value属性的值。函数cvSetCaptureProperty设置指定视频获取的属性。目前这个函数对视频文件只支持:CV_CAP_PROP_POS_MSEC,CV_CAP_PROP_POS_FRAMES,CV_CAP_PROP_POS_AVI_RATIO设置摄像头属性的函数35创建滚动条该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。

定义:

CV_EXTERN_C_FUNCPTR(void(*CvTrackbarCallback)(intpos));

intcvCreateTrackbar(constchar*trackbar_name,constchar*window_name,int*value,intcount,CvTrackbarCallbackon_change);

创建滚动条该函数为开放计算机视觉(OpenCV)库库函数,36创建滚动条参数:

trackbar_name

被创建的trackbar名字。

window_name

窗口名字,这个窗口将为被创建trackbar的父对象。

value

整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。

count

滑块位置的最大值。最小值一直是0。

on_change

每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为voidFoo(int);如果没有回调函数,这个值可以设为NULL。函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的显示位置。

创建滚动条参数:37回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调函数38Opencv视频教程Opencv写视频文件Opencv视频教程39Opencv写视频文件核心函数cvCreateVideoWritercvWriteFramecvReleaseVideoWriterOpencv写视频文件核心函数cvCreateVideoWr40cvCreateVideoWritercvCreateVideoWriter(constchar*filename,intfourcc,doublefps,CvSizeframe_size,intis_color=1);

filename:指定新建视频的文件名字。fourcc:视频压缩的编码格式,目前有多种流行的编解码格式,但无论采用哪种格式,都必须确认自己的电脑上安装了这种格式(编解码器的安装是独立于opencv的)。fps:帧率,在第4集中有介绍。frame_size:视频帧的大小。is_color:如果非零,编码器将希望得到彩色帧并进行编码

,否则,是灰度帧cvCreateVideoWritercvCreateVid41cvWriteFrame功能:把一帧图像写入到视频文件cvWriteFrame42cvReleaseVideoWriter释放视频写入设备,如果不释放,会导致写视频失败,所以一定要记得释放。cvReleaseVideoWriter释放视频写入设备,如43Opencv视频教程Opencv基本数据结构Opencv视频教程44Opencv基本数据结构cxcore/include/cxtypes.hCvPoint系列CvSize系列CvSizeCvRectCvScalarCvArrOpencv基本数据结构cxcore/include/cxt45CvPoint系列CvPoint:表示图像中的点(见示意图)CvPoint2D32f:二维空间中的点CvPoint3D32f:三维空间中的点构造函数:cvPointXXXX()。注意,这是c风格的代码,构造函数是内联函数,并不是c++中的类的构造函数一样。CvPoint系列46CvSize系列CvSize:图像的尺寸CvSize2D32f:如果想用浮点型。CvSize系列47CvRect可以用来表示图像的部分区域(示意图)CvRect可以用来表示图像的部分区域(示意图)48CvScalar包含4个浮点成员,可以用来表示表示B,G,R,alpha。(示意图)有三个构造函数:cvScalar,cvRealScalar,cvScalarAllCvScalar49CvArrCvArr50CvArr虽然Opencv1.0是大部分是由C语言完成,但是他使用的结构也是遵循面向对象的思想的。CvMat与IplImage的关系就如同C++中的继承关系,IplImage可以视为从CvMat派生的。CvArr可以视为抽象类。(例子展示)CvArr51Opencv视频教程CvMat结构体Opencv视频教程52CvMat结构体定义typedefstructCvMat{inttype;intstep;/*forinternaluseonly*/int*refcount;inthdr_refcount;union{uchar*ptr;short*s;int*i;float*fl;double*db;}data;#ifdef__cplusplusunion{introws;intheight;};union{intcols;intwidth;};#elseintrows;intcols;#endif}CvMat;CvMat结构体定义typedefstructCvMat53创建一个矩阵,方式一cvCreateMat(introws,intcols,inttype)Type可以使任何预定义类型。Type的写法规则:CV_<bit_depth>(S|U|F)C<number_of_channels。创建一个矩阵,方式一54创建一个矩阵,方式二cvCreateMatHeader()函数创建CvMat结构体,不分配数据内存cvCreateData()函数分配数据需要的内存创建一个矩阵,方式二55从数组创建矩阵,方式三cvInitMatHeader()函数,在已有的CvMat结构体上初始化矩阵。从数组创建矩阵,方式三cvInitMatHeader()函数56克隆矩阵,方式四cvCloneMat(),该函数依据现有矩阵克隆一个矩阵,分配了独立的空间,需要使用cvReleaseMat()释放。克隆矩阵,方式四57获取矩阵的相关属性获取矩阵的数据类型:cvGetElemType获取矩阵的通道数(维度):cvGetDims获取矩阵某一个维度上的大小:cvGetDimSize二维矩阵获取矩阵大小:cvGetSize获取矩阵的相关属性获取矩阵的数据类型:cvGetElemTy58Opencv视频教程Opencv结构与内容Opencv视频教程59Opencv结构cxcorecvMachineLearning(ML)HighGUIcvcamcvauxOpencv结构cxcore60cxcore基础结构:CvPoint,CvSize,CvScalar等数组操作:cvCreateImage,cvCreateMat等动态结构:CvMemStorage,CvMemBlock等绘图函数:cvLine,cvRectangle等数据保存和运行时类型信息:CvFileStorage,cvOpenFileStorage等错误处理和系统函数:cvGetErrStatus,cvAlloc,cvFree等cxcore61cv图像处理:cvSobel,cvCanny等结构分析:ContourArea等运动分析与目标跟踪:cvMeanShift等模式识别:CvHaarFeature摄像头定标与三维重建:cvCalibrateCamer2cv62MachineLearning(ML)包含许多聚类、分类和数据分析函数。如Bayes分类器,K近邻算法,支持向量机,决策树,神经网络等等。MachineLearning(ML)包含许多聚类、分类和63HighGUI图像界面函数:cvNamedWindow读图像和保存图像:cvLoadImage,cvSaveImage读视频和写视频:CvCreateFileCapture等HighGUI64cvcam摄像机接口,在Opencv1.0以后的版本中已经被移除cvcam65cvaux该模块中一般存放一些即将被淘汰的算法和函数(如基于嵌入式隐马尔科夫的人脸识别算法),还包含一些实验性的算法和函数(前景检测,背景剔除等)cvaux66Opencv的结构Opencv的结构67Opencv视频教程显示图像Opencv视频教程68第一个程序:显示图像基于Opencv,我们可以读取各种图像文件,视频文件,还可以读取摄像头。这些功能是Opencv开发包中HighGUI工具集的一部分。下面,我们就使用其中的一些功能来实现如何显示一幅图像。第一个程序:显示图像基于Opencv,我们可以读取各种图像文69显示图像代码#include"highgui.h"intmain(intargc,char*argv[]){ IplImage*src=cvLoadImage("F:\\psbCA2V1GZ7.jpg",1); cvNamedWindow("show_image"); cvShowImage("show_image",src); cvWaitKey(0); return0;}显示图像代码#include"highgui.h"70cvLoadImage(char*filename,intflags=CV_LOAD_IMAGE_COLOR)Filename:图像所在路径Flags:/*图像颜色不变

*/#defineCV_LOAD_IMAGE_UNCHANGED-1/*灰度图像(单通道)*/#defineCV_LOAD_IMAGE_GRAYSCALE0/*彩色图像(3通道图像)*/#defineCV_LOAD_IMAGE_COLOR1cvLoadImage(char*filename,int71cvLoadImage参数说明Flags:/*则输入图像格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型*/#defineCV_LOAD_IMAGE_ANYDEPTH2/*保持原样*/#defineCV_LOAD_IMAGE_ANYCOLOR4cvLoadImage参数说明72cvLoadImage参数说明如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR

如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_GRAYSCALE|CV_LOAD_IMAGE_COLOR将载入单通道图。

cvLoadImage参数说明如果想要载入最真实的图像,选择73cvLoadImage的功能通过文件名确定被加载图像的格式,并且该函数在内部分配图像数据结构所需要的内存空间。支持的图像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS,TIFF。cvLoadImage的功能74IntcvNamedWindow(char*name,intflagsname:窗口的标志。如果已经有同名窗口,则该函数什么也不干。Flags:CV_WINDOW_AUTOSIZE,会根据图像大小自动调整窗口大小。如果是0,则窗口大小不变。IntcvNamedWindow(char*name,in75cvShowImage(char*name,IplImage*dst)功能:在指定窗口上显示图像。name:窗口的标志。这个标志是cvNamedWindow函数设定的。dst:被显示的图像。cvShowImage(char*name,IplImag76IntcvWaitKey(intkey)Key:如果key的值是大于0的数,那么该函数的功能是,在此处暂停key毫秒。如果是小于等于0的数,那么,该函数是在等待用户的按键输入。IntcvWaitKey(intkey)Key:如果ke77cvReleaseImage(IplImage**src)释放图像空间。cvReleaseImage(IplImage**src)78cvDestroyWindow(char*name)注销一个窗口。同时释放为该窗口所分配的所有内存(包括窗口内部的图像内存缓冲区)cvDestroyWindow(char*name)注销一79Opencv视频教程Opencv读取视频Opencv视频教程80Opencv读取视频代码#include"highgui.h"intmain(intargc,char*argv[]){ cvNamedWindow("avi"); CvCapture*capture=cvCreateFileCapture(“视频文件路径"); IplImage*frame; while(1) { frame=cvQueryFrame(capture); if(!frame)break; cvShowImage("avi",frame); charc=cvWaitKey(33); if(c==27) break; } cvReleaseCapture(&capture); cvDestroyWindow("avi"); return0;}Opencv读取视频代码#include"highgui.81结构体CvCaptureCvCapture是一个结构体,用来保存图像捕获所需要的信息。opencv提供两种方式从外部捕获图像一种是从摄像头中,一种是通过解码视频得到图像。两种方式都必须从第一帧开始一帧一帧的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。比如从视频文件中获取,需要保存视频文件的文件名,相应的解码器类型,下一次如果要获取将需要解码哪一帧等。这些信息都保存在CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧需要将新信息传给获取的api接口结构体CvCaptureCvCapture是一个结构体,用82cvCreateFileCapture(char*name)通过输入要读取的avi文件的路径,然后,该函数返回一个指向CvCapture结构体的指针。cvCreateFileCapture(char*name)83cvQueryFrame(capture)输入一个CvCapture类型的指针,该函数主要功能是将视频文件的下一帧加载到内存。与cvLoadImage的不同之处是,该函数不重新分配内存空间。cvQueryFrame(capture)输入一个CvCap84C=cvWaitKey(33)当前帧被显示后,等待33毫秒。如果用户触发了一个按键,c会被设置成这个按键的ASCII码,否则会被设置成-1。cvWaitKey(33)在此处的另外一个作用是,控制帧率。C=cvWaitKey(33)当前帧被显示后,等待33毫秒。85cvReleaseCapture(&capture)释放为CvCapture结构体开辟的内存空间关闭打开的AVI文件相关的文件句柄cvReleaseCapture(&capture)86读取摄像头只需把cvCreateFileCapture改成cvCreateCameraCapture即可。该函数的输入参数是一个ID号,只有存在多个摄像头时才起作用。当ID=-1时,表示随机选择一个。HighGUI做了很多工作,使得摄像机图像序列像一个视频文件一样。在第4章,会有更详细的介绍。读取摄像头87总结总结88常见问题(1)视频文件路径没写对(2)没有安装解码器(3)如果使用的是Opencv2.0或更高版本,那么,能否正确加载opencv_ffmpeg210.dll(4)尽管是AVI文件,但也可能使用了某种codec,例如:MJPEGDecompressor。需要把它转换OpenCV支持的AVI文件.OpenCV支持的AVI。例如使用狸窝全能视频转换器,在《预置方案》处,选择AVI-Audio_VideoInterleaved(*.avi)。或者使用格式工厂也可以。(5)读摄像头数据,需要安装与摄像头相应的驱动程序。常见问题(1)视频文件路径没写对89Opencv视频教程视频播放控制Opencv视频教程90获取摄像头属性的函数doublecvGetCaptureProperty(CvCapture*capture,intproperty_id)

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-视频文件中帧的总数获取摄像头属性的函数doublecvGetCaptureP91一个bug有时候函数cvGetCaptureProperty在cvQueryFrame被调用一次后,再调用cvGetCaptureProperty才会返回正确的数值。这是一个bug,建议在调用此函数前先调用cvQueryFrame。

一个bug有时候函数cvGetCaptureProperty92设置摄像头属性的函数intcvSetCaptureProperty(CvCapture*capture,intproperty_id,doublevalue);

capture视频获取结构。

property_id属性标识符。可以是下面之一:

CV_CAP_PROP_POS_MSEC-从文件开始的位置,单位为毫秒

CV_CAP_PROP_POS_FRAMES-单位为帧数的位置(只对视频文件有效)

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的四个字符(只对摄像头有效)value属性的值。函数cvSetCaptureProperty设置指定视频获取的属性。目前这个函数对视频文件只支持:CV_CAP_PROP_POS_MSEC,CV_CAP_PROP_POS_FRAMES,CV_CAP_PROP_POS_AVI_RATIO设置摄像头属性的函数93创建滚动条该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。

定义:

CV_EXTERN_C_FUNCPTR(void(*CvTrackbarCallback)(intpos));

intcvCreateTrackbar(constchar*trackbar_name,constchar*window_name,int*value,intcount,CvTrackbarCallbackon_change);

创建滚动条该函数为开放计算机视觉(OpenCV)库库函数,94创建滚动条参数:

trackbar_name

被创建的trackbar名字。

window_name

窗口名字,这个窗口将为被创建trackbar的父对象。

value

整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。

count

滑块位置的最大值。最小值一直是0。

on_change

每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为voidFoo(int);如果没有回调函数,这个值可以设为NULL。函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的显示位置。

创建滚动条参数:95回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调函数96Opencv视频教程Opencv写视频文件Opencv视频教程97Opencv写视频文件核心函数cvCreateVideoWritercvWriteFramecvReleaseVideoWriterOpencv写视频文件核心函数cvCreateVideoWr98cvCreateVideoWritercvCreateVideoWriter(constchar*filename,intfourcc,doublefps,CvSizeframe_size,intis_color=1);

filename:指定新建视频的文件名字。fourcc:视频压缩的编码格式,目前有多种流行的编解码格式,但无论采用哪种格式,都必须确认自己的电脑上安装了这种格式(编解码器的安装是独立于opencv的)。fps:帧率,在第4集中有介绍。frame_size:视频帧的大小。is_color:如果非零,编码器将希望得到彩色帧并进行编码

,否则,是灰度帧cvCreateVideoWritercvCreateVid99cvWriteFrame功能:把一帧图像写入到视频文件cvWriteFrame100cvReleaseVideoWriter释放视频写入设备,如果不释放,会导致写视频失败,所以一定要记得释放。cvRe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论