




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Opencv视频教程Opencv结构与内容Opencv结构cxcorecvMachine Learning(ML)HighGUIcvcamcvauxcxcore基础结构:CvPoint,CvSize,CvScalar等数组操作:cvCreateImage,cvCreateMat等动态结构:CvMemStorage,CvMemBlock等绘图函数:cvLine,cvRectangle等数据保存和运行时类型信息:CvFileStorage,cvOpenFileStorage等错误处理和系统函数:cvGetErrStatus,cvAlloc,cvFree等cv图像处理:cvSobel,cvCanny
2、等结构分析:ContourArea等运动分析与目标跟踪:cvMeanShift等模式识别:CvHaarFeature摄像头定标与三维重建:cvCalibrateCamer2Machine Learning(ML)包含许多聚类、分类和数据分析函数。如Bayes分类器,K近邻算法,支持向量机,决策树,神经网络等等。HighGUI图像界面函数:cvNamedWindow读图像和保存图像:cvLoadImage,cvSaveImage读视频和写视频:CvCreateFileCapture等cvcam摄像机接口,在Opencv1.0以后的版本中已经被移除cvaux该模块中一般存放一些即将被淘汰的算法和函
3、数(如基于嵌入式隐马尔科夫的人脸识别算法),还包含一些实验性的算法和函数(前景检测,背景剔除等)Opencv的结构Opencv视频教程显示图像第一个程序:显示图像基于Opencv,我们可以读取各种图像文件,视频文件,还可以读取摄像头。这些功能是Opencv开发包中HighGUI工具集的一部分。下面,我们就使用其中的一些功能来实现如何显示一幅图像。显示图像代码#include highgui.hint main(int argc, char* argv)IplImage* src = cvLoadImage(F:psbCA2V1GZ7.jpg , 1);cvNamedWindow(show_im
4、age);cvShowImage(show_image,src);cvWaitKey(0);return 0;cvLoadImage(char* filename,int flags=CV_LOAD_IMAGE_COLOR)Filename:图像所在路径Flags:/* 图像颜色不变 */#define CV_LOAD_IMAGE_UNCHANGED -1/*灰度图像(单通道) */#define CV_LOAD_IMAGE_GRAYSCALE 0/* 彩色图像(3通道图像) */#define CV_LOAD_IMAGE_COLOR 1cvLoadImage参数说明Flags:/*则输入图像
5、格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型 */ #define CV_LOAD_IMAGE_ANYDEPTH 2/* 保持原样 */#define CV_LOAD_IMAGE_ANYCOLOR 4cvLoadImage参数说明如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR 如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_GRAYSCALE | CV_LOAD_IMAGE_COLOR将载入单通道图。 cvLoadImage的功能通过文件名确定被加载图像的格式,并且该函数
6、在内部分配图像数据结构所需要的内存空间。支持的图像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS,TIFF。Int cvNamedWindow(char*name,int flagsname:窗口的标志。如果已经有同名窗口,则该函数什么也不干。Flags:CV_WINDOW_AUTOSIZE ,会根据图像大小自动调整窗口大小。如果是0,则窗口大小不变。cvShowImage(char* name,IplImage* dst)功能:在指定窗口上显示图像。name:窗口的标志。这个标志是cvNamedWindow函数设定的。dst:被显示的图像。Int cvW
7、aitKey(int key)Key:如果key的值是大于0的数,那么该函数的功能是,在此处暂停key毫秒。如果是小于等于0的数,那么,该函数是在等待用户的按键输入。cvReleaseImage(IplImage* src)释放图像空间。cvDestroyWindow(char* name)注销一个窗口。同时释放为该窗口所分配的所有内存(包括窗口内部的图像内存缓冲区)Opencv视频教程Opencv读取视频Opencv读取视频代码#include highgui.hint main(int argc, char* argv)cvNamedWindow(avi);CvCapture* captu
8、re = cvCreateFileCapture(“视频文件路径);IplImage* frame;while(1)frame = cvQueryFrame(capture);if(!frame)break;cvShowImage(avi,frame);char c = cvWaitKey(33);if(c=27)break;cvReleaseCapture(&capture);cvDestroyWindow(avi);return 0;结构体CvCaptureCvCapture 是一个结构体,用来保存图像捕获所需要的信息。 opencv提供两种方式从外部捕获图像一种是从摄像头中,一种是通过解
9、码视频得到图像。 两种方式都必须从第一帧开始一帧一帧的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。 比如从视频文件中获取,需要保存视频文件的文件名,相应的解码器类型,下一次如果要获取将需要解码哪一帧等。 这些信息都保存在CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧需要将新信息传给获取的api接口cvCreateFileCapture(char*name)通过输入要读取的avi文件的路径,然后,该函数返回一个指向CvCapture结构体的指针。cvQueryFrame(capture)输入一个CvCapture类型的指针,该函数主要功能是将视频文件的下一帧加载
10、到内存。与cvLoadImage的不同之处是,该函数不重新分配内存空间。C=cvWaitKey(33)当前帧被显示后,等待33毫秒。如果用户触发了一个按键,c会被设置成这个按键的ASCII码,否则会被设置成-1。cvWaitKey(33)在此处的另外一个作用是,控制帧率。cvReleaseCapture(&capture)释放为CvCapture结构体开辟的内存空间关闭打开的AVI文件相关的文件句柄读取摄像头只需把cvCreateFileCapture改成cvCreateCameraCapture即可。该函数的输入参数是一个ID号,只有存在多个摄像头时才起作用。当ID=-1时,表示随机选择一个
11、。HighGUI做了很多工作,使得摄像机图像序列像一个视频文件一样。在第4章,会有更详细的介绍。总结常见问题(1)视频文件路径没写对(2)没有安装解码器(3)如果使用的是Opencv2.0或更高版本,那么,能否正确加载opencv_ffmpeg210.dll(4)尽管是AVI文件,但也可能使用了某种codec,例如:MJPEG Decompressor。 需要把它转换OpenCV支持的AVI文件. OpenCV支持的AVI。例如使用狸窝全能视频转换器,在预置方案处,选择AVI-Audio_Video Interleaved(*.avi)。或者使用格式工厂也可以。(5)读摄像头数据,需要安装与摄
12、像头相应的驱动程序。Opencv视频教程视频播放控制获取摄像头属性的函数double cvGetCaptureProperty( CvCapture* capture, int property_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
13、_HEIGHT - 视频流中的帧高度CV_CAP_PROP_FPS - 帧率CV_CAP_PROP_FOURCC - 表示codec的四个字符CV_CAP_PROP_FRAME_COUNT - 视频文件中帧的总数 一个bug有时候函数cvGetCaptureProperty在cvQueryFrame被调用一次后,再调用cvGetCaptureProperty才会返回正确的数值。这是一个bug,建议在调用此函数前先调用cvQueryFrame。 设置摄像头属性的函数int cvSetCaptureProperty( CvCapture* capture, int property_id, dou
14、ble value );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 - 帧率(只对摄
15、像头有效)CV_CAP_PROP_FOURCC - 表示codec的四个字符(只对摄像头有效)value 属性的值。函数cvSetCaptureProperty设置指定视频获取的属性。目前这个函数对视频文件只支持: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO 创建滚动条该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。定义:CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );int cvC
16、reateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change ); 创建滚动条参数:trackbar_name被创建的trackbar名字。window_name窗口名字,这个窗口将为被创建trackbar的父对象。value整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。count滑块位置的最大值。最小值一直是0。on_change每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void
17、 Foo(int); 如果没有回调函数,这个值可以设为NULL。函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的显示位置。 回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指
18、向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 Opencv视频教程Opencv写视频文件Opencv写视频文件核心函数cvCreateVideoWritercvWriteFramecvReleaseVideoWritercvCreateVideoWritercvCreateVideoWriter (const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 ); filename:指定新建视频
19、的文件名字。fourcc:视频压缩的编码格式,目前有多种流行的编解码格式,但无论采用哪种格式,都必须确认自己的电脑上安装了这种格式(编解码器的安装是独立于opencv的)。fps:帧率,在第4集中有介绍。frame_size:视频帧的大小。is_color:如果非零,编 码器将希望得到彩色帧并进行编码 ,否则,是灰度帧 cvWriteFrame功能:把一帧图像写入到视频文件cvReleaseVideoWriter释放视频写入设备,如果不释放,会导致写视频失败,所以一定要记得释放。Opencv视频教程Opencv基本数据结构Opencv基本数据结构cxcore/include/cxtypes.h
20、CvPoint系列CvSize系列CvSizeCvRectCvScalarCvArrCvPoint系列CvPoint:表示图像中的点(见示意图)CvPoint2D32f:二维空间中的点CvPoint3D32f:三维空间中的点构造函数:cvPointXXXX( )。注意,这是c风格的代码,构造函数是内联函数,并不是c+中的类的构造函数一样。CvSize系列CvSize:图像的尺寸CvSize2D32f:如果想用浮点型。CvRect可以用来表示图像的部分区域(示意图)CvScalar包含4个浮点成员,可以用来表示表示B,G,R,alpha。(示意图)有三个构造函数:cvScalar,cvRealScalar,cvScalarAllCvArrCvArr虽然Opencv1.0是大部分是由C语言完成,但是他使用的结构也是遵循面向对象的思想的。CvMat与IplImage的关系就如同C+中的继承关系,IplImage可以视为从CvMat派生的。CvArr可以视为抽象类。(例子展示)Opencv视频教程CvMat结构体
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社会心理辅导班学员成长计划
- 小学数学复习计划:课后辅导与练习
- 历史素养提升的八年级教学计划
- 八年级组第二学期教学计划范文
- 离婚协议书中的债务处理方案
- 中小学文化课培优补差工作计划
- 初三各学科复习计划之政治篇
- 中学广播站活动策划计划
- 法律援助与性侵防范工作计划
- 医美医生职业形象提升计划
- 七年级信息技术教案下册(合集6篇)
- 电子商务概论(第四版)课件 张润彤 第7-12章 企业电子商务的发展与管理-电子商务应用案例
- 系统商用密码应用方案v5-2024(新模版)
- HW流程梳理与优化咨询项目方法论 相关两份资料
- 第七届江西省大学生金相技能大赛知识竞赛单选题题库附有答案
- 2024年山东省滨州市中考语文试卷及答案
- 指南针英文介绍
- 2024版租房合同协议书下载
- AQ3058-2023内浮顶储罐检修安全规范
- 海上风电投资开发合规管控
- 湖州市建筑施工安全标准化图册
评论
0/150
提交评论