Opencv应用视频文件的打开及简单处理

上传人:M****1 文档编号:489513265 上传时间:2024-01-09 格式:DOC 页数:17 大小:532.50KB
返回 下载 相关 举报
Opencv应用视频文件的打开及简单处理_第1页
第1页 / 共17页
Opencv应用视频文件的打开及简单处理_第2页
第2页 / 共17页
Opencv应用视频文件的打开及简单处理_第3页
第3页 / 共17页
Opencv应用视频文件的打开及简单处理_第4页
第4页 / 共17页
Opencv应用视频文件的打开及简单处理_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《Opencv应用视频文件的打开及简单处理》由会员分享,可在线阅读,更多相关《Opencv应用视频文件的打开及简单处理(17页珍藏版)》请在金锄头文库上搜索。

1、Opencv应用视频文件的打开及简单处理院系:信息科学与技术学院专业:电子信息工程姓名:赵陈威学号:Opencv应用视频文件的打开及简单处理赵陈威(信息科学与技术学院电子信息工程专业 )摘要:针对视频打开和处理这一具体应用用Opencv设计一个处理系统,简要介绍Opencv的安装、配置及其具体应用的开发过程及开发过程中遇到的问题以及解决方案。关键字:安装 配置 设计方法 遇到的问题及其解决方案目前,数字图像处理在国民生产中起到日益重要的作用,对其的研究也日益广泛和深入。OpenCV程序库作为数字图像研究的软件助手,具有简单易用、功能强大、移植方便等优越性能。OpenCV是Intel开源计算机视

2、觉库(Open Computer Vision)的简称。它由一系列 C 函数和少量 C+ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库尽管也可以使用某些外部库。OpenCV 对非商业应用和商业应用都是免费(FREE)的。OpenCV 为Intel Integrated Performance Primitives (IPP) 提供了透明接口。 这意味着如果有为特定处理器优化的的 IPP 库, OpenCV 将在运行时自动加载这些库。Opencv相当于一个含有丰富函数的程序库,当要处理图像及视频

3、的处理时VC+将调用Opencv里的库函数直接进行处理。所谓程序库,一般是软件作者为了发布方便、替换方便或二次开发目的,而发布的一组可以单独与应用程序进行compile time或runtime链接的二进制可重定位目标码文件。通俗一点说,所谓一个库,就是一个文件,这个文件可以在编译时由编译器直接链接到可执行程序中,也可以在运行时由操作系统的runtime enviroment根据需要动态加载到内存中。一组库,就形成了一个发布包,当然,具体发布多少个库,完全由库提供商自己决定。Opencv里的程序库包含静态库和动态库两种:所谓静态库,就是在静态编译时由编译器到指定目录寻找并且进行链接,一旦链接完

4、成,最终的可执行程序中就包含了该库文件中的所有有用信息,包括代码段、数据段等。所谓动态库,就是在应用程序运行时,由操作系统根据应用程序的请求,动态到指定目录下寻找并装载入内存中,同时需要进行地址重定向。 win32平台下,静态库通常后缀为.lib,动态库为.dll linux平台下,静态库通常后缀为.a,动态库为.so 从本质上来说,由同一段程序编译出来的静态库和动态库,在功能上是没有区别的。不同之处仅仅在于其名字上,也就是“静态”和“动态”。由上面的介绍不难看出,相对于动态库,静态库的优点在于直接被链接进可执行程序中,之后,该可执行程序就不再依赖于运行环境的设置了(当然仍然会依赖于 CPU指

5、令集和操作系统支持的可执行文件格式等硬性限制)。而动态库的优点在于,用户甚至可以在程序运行时随时替换该动态库,这就构成了动态插件系统的基础。具体使用静态库和动态库,由程序员根据需要自己决定。下面开始opencv的安装与配置:首先在目录D:Program Files下安装opencv安装目录为D:Program FilesOpenCV(在安装时选择将OpenCVbin加入系统变量(AddOpenCVbin to the systerm PATH)。完成安装然后要进行opencv的配置。配置十分重要,如果配置不好程序运行时将无法正确的调用正确的头文件及各种库函数,那么程序将无法运行。首先要配置Wi

6、ndows环境变量:检查D:Program FilesOpenCVbin是否已经被加入到环境变量PATH,如果没有,手动加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。如下图所示然后进行对Visual C+ 6.0的配置:打开Visual C+ 6.0选择菜单工具-选项-目录:先设置lib路径,选择Library files,在下方路径中填入路径d:Program FilesOpencvlib,如图所示:然后选择include files,在下方填入路径:(如图所示)d:Program FilesOpencvcxcoreincluded:Program FilesOpen

7、cvcvincluded:Program FilesOpencvcvauxincluded:Program FilesOpencvotherlibshighguid:Program FilesOpencvotherlibsinclude另外,还要进行项目设置:每创建一个将要使用OpenCV的VC Project,都需要给它指定需要的lib。创建一个工程之后,选择工程-设置,然后将“设置”选为“所有配置”,然后选择右边的连接标签,在对象/库模块附加上cxcore.lib cv.lib cvaux.lib highgui.lib cvcam.lib(如果不需要这么多lib,可以只添加你需要的lib

8、)。如图所示:以上就完成了Opencv的所以安装与配置,下面将介绍具体应用视频的打开及简单处理(运动检测)的设计方法、遇到的问题及其解决方案。首先用VC6.0的MFC建立一个对话框程序,设工程名为aa,在对话框上添加三个按钮,一个用于打开AVI视频文件,一个用于做处理按钮,一个用于程序的退出。如图所示对应的响应函数分别为如下:void Cvision:OnOpen() CFileDialog dlg(TRUE, _T(*.bmp), , OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, AVI files (*.avi) |*.avi|

9、All Files (*.*)|*.*|,NULL); char title= Open AVI; dlg.m_ofn.lpstrTitle= title; if (dlg.DoModal() = IDOK) CString path= dlg.GetPathName();/声明IplImage指针IplImage* pFrame = NULL;IplImage* pFrImg = NULL;IplImage* pBkImg = NULL;CvMat* pFrameMat = NULL;CvMat* pFrMat = NULL;CvMat* pBkMat = NULL;CvCapture* p

10、Capture = NULL;int nFrmNum = 0;/打开AVI视频文件if(path=) /判断文件路径是否为空MessageBox(请先选择AVI视频文件!);return;elseif(!(pCapture = cvCaptureFromFile(path)MessageBox(打开AVI视频文件失败!);return;/创建窗口cvNamedWindow(Video, 1);cvNamedWindow(Background,1);cvNamedWindow(Foreground,1);/使窗口有序排列,窗口宽330cvMoveWindow(Video, 30, 0);cvMo

11、veWindow(Background, 360, 0);cvMoveWindow(Foreground, 690, 0);/逐帧读取视频while(pFrame = cvQueryFrame( pCapture )nFrmNum+;/如果是第一帧,需要申请内存,并初始化if(nFrmNum = 1)pBkImg = cvCreateImage(cvSize(pFrame-width, pFrame-height), IPL_DEPTH_8U,1); / 存放背景图像(灰度)pFrImg = cvCreateImage(cvSize(pFrame-width, pFrame-height),

12、IPL_DEPTH_8U,1); / 存放中间图像(灰度)pBkMat = cvCreateMat(pFrame-height, pFrame-width, CV_32FC1);pFrMat = cvCreateMat(pFrame-height, pFrame-width, CV_32FC1);pFrameMat = cvCreateMat(pFrame-height, pFrame-width, CV_32FC1);/转化成单通道图像再处理(灰度)cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);cvCvtColor(pFrame, pFrImg, CV_BG

13、R2GRAY);cvConvert(pFrImg, pFrameMat);cvConvert(pFrImg, pFrMat);cvConvert(pFrImg, pBkMat);elsecvCvtColor(pFrame, pFrImg, CV_BGR2GRAY); /转化成单通道图像再处理(灰度)cvConvert(pFrImg, pFrameMat);/高斯滤波先,以平滑图像/当前帧跟背景图相减(求背景差并取绝对值)cvAbsDiff(pFrameMat, pBkMat, pFrMat);/二值化前景图(这里采用特定阈值进行二值化)cvThreshold(pFrMat, pFrImg, 6

14、0, 255.0, CV_THRESH_BINARY);/进行形态学滤波,去掉噪音cvErode(pFrImg, pFrImg, 0, 1);cvDilate(pFrImg, pFrImg, 0, 1);/滑动平均更新背景(求平均)cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);/将背景转化为图像格式,用以显示cvConvert(pBkMat, pBkImg);/ 保持原图像的旋转方向pBkImg-origin = pFrImg-origin = pFrame-origin;/显示图像cvShowImage(Video, pFrame);cvShowImage(Background, pBkImg);cvShowImage(Foreground, pFrImg);/如果有按键事件,则跳出循环/此等待也为cvShowImage函数提供时间完成显示if( cvWaitKey(200) = 0 )break;函数流程为:首先定义及初始化函数调用过程中用到的变量及指针,然后创建打开视频

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号