版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 从本质上来说,由同一段程序编译出来的静态库和动态库,在功能上是没有区别的。不同之处仅仅在于其名字上,也就是“静态”和“动态”。由上面的介绍不难看出,相对于动态库,静态库的优点在于直接被链接进可执行程序中,之后,该可执行程序就不再依赖于运行环境的设置了(当然仍然会依赖
5、于 CPU指令集和操作系统支持的可执行文件格式等硬性限制)。而动态库的优点在于,用户甚至可以在程序运行时随时替换该动态库,这就构成了动态插件系统的基础。具体使用静态库和动态库,由程序员根据需要自己决定。下面开始opencv的安装与配置:首先在目录D:Program Files下安装opencv安装目录为D:Program FilesOpenCV(在安装时选择"将OpenCVbin加入系统变量"(AddOpenCVbin to the systerm PATH)。完成安装然后要进行opencv的配置。配置十分重要,如果配置不好程序运行时将无法正确的调用正确的头文件及各种库函数
6、,那么程序将无法运行。首先要配置Windows环境变量:检查D:Program FilesOpenCVbin是否已经被加入到环境变量PATH,如果没有,手动加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。如下图所示然后进行对Visual C+ 6.0的配置:打开Visual C+ 6.0选择菜单工具->选项->目录:先设置lib路径,选择Library files,在下方路径中填入路径d:Program FilesOpencvlib,如图所示:然后选择include files,在下方填入路径:(如图所示)d:Program FilesOpencvcxcore
7、included:Program FilesOpencvcvincluded:Program FilesOpencvcvauxincluded:Program FilesOpencvotherlibshighguid:Program FilesOpencvotherlibsinclude另外,还要进行项目设置:每创建一个将要使用OpenCV的VC Project,都需要给它指定需要的lib。创建一个工程之后,选择工程->设置,然后将“设置”选为“所有配置”,然后选择右边的连接标签,在对象/库模块附加上cxcore.lib cv.lib cvaux.lib highgui.lib cvca
8、m.lib(如果不需要这么多lib,可以只添加你需要的lib)。如图所示:以上就完成了Opencv的所以安装与配置,下面将介绍具体应用视频的打开及简单处理(运动检测)的设计方法、遇到的问题及其解决方案。首先用VC6.0的MFC建立一个对话框程序,设工程名为aa,在对话框上添加三个按钮,一个用于打开AVI视频文件,一个用于做处理按钮,一个用于程序的退出。如图所示对应的响应函数分别为如下:void Cvision:OnOpen() CFileDialog dlg(TRUE, _T("*.bmp"), "", OFN_FILEMUSTEXIST|OFN_PAT
9、HMUSTEXIST|OFN_HIDEREADONLY, "AVI files (*.avi) |*.avi|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;C
10、vMat* pFrameMat = NULL;CvMat* pFrMat = NULL;CvMat* pBkMat = NULL;CvCapture* pCapture = NULL;int nFrmNum = 0;/打开AVI视频文件if(path="") /判断文件路径是否为空MessageBox("请先选择AVI视频文件!");return;elseif(!(pCapture = cvCaptureFromFile(path)MessageBox("打开AVI视频文件失败!");return;/创建窗口cvNamedWindow
11、("Video", 1);cvNamedWindow("Background",1);cvNamedWindow("Foreground",1);/使窗口有序排列,窗口宽330cvMoveWindow("Video", 30, 0);cvMoveWindow("Background", 360, 0);cvMoveWindow("Foreground", 690, 0);/逐帧读取视频while(pFrame = cvQueryFrame( pCapture )nFrmNum
12、+;/如果是第一帧,需要申请内存,并初始化if(nFrmNum = 1)pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1); / 存放背景图像(灰度)pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1); / 存放中间图像(灰度)pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);pF
13、rMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);/转化成单通道图像再处理(灰度)cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);cvConvert(pFrImg, pFrameMat);cvConvert(pFrImg, pFrMat);cvConvert(pF
14、rImg, pBkMat);elsecvCvtColor(pFrame, pFrImg, CV_BGR2GRAY); /转化成单通道图像再处理(灰度)cvConvert(pFrImg, pFrameMat);/高斯滤波先,以平滑图像/当前帧跟背景图相减(求背景差并取绝对值)cvAbsDiff(pFrameMat, pBkMat, pFrMat);/二值化前景图(这里采用特定阈值进行二值化)cvThreshold(pFrMat, pFrImg, 60, 255.0, CV_THRESH_BINARY);/进行形态学滤波,去掉噪音cvErode(pFrImg, pFrImg, 0, 1);cvDi
15、late(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("
16、;Foreground", pFrImg);/如果有按键事件,则跳出循环/此等待也为cvShowImage函数提供时间完成显示if( cvWaitKey(200) >= 0 )break;函数流程为:首先定义及初始化函数调用过程中用到的变量及指针,然后创建打开视频的窗口设置窗口的参数,其中包括窗口的长、宽、排列方式以及窗口在屏幕上的位置参数,然后逐帧读取视频。视频的读取和处理和图像的读取和处理原理一样,视频的读取是一帧一帧的进行的,视频的处理也是对视频的一帧进行处理然后连续播放形成连续播放的视频,所以说视频的处理过程也是图像的处理过程。读取视频后创建三个窗口分别显示视频、前景图
17、像和背景图像。前景图像窗口用于视频运动检测。视频运动检测有两种方法:连续帧间差分法和背景差分法。连续帧间差分法的主要优点有算法实现简单;程序设计复杂度低;易于实现实时监视;由于相邻帧的时间间隔较短,因此该方法对场景光线的变化不太敏感,受目标阴影的影响也不太大,连续帧间差分法对动态环境有较好的适应性。这里采用背景差分法。背景差分法的主要特点是要求使用当前被监视环境中的一幅静态背景;利用背景图像与当前帧图像的差进行运动目标检测;基于背景差分的运动目标检测虽然较连续帧间差分法可以提取出更为完整的目标图像,但所采集到的背景图像随着时间的推移,会对光照和外部条件造成的场景变化比较敏感,会出现许多伪运动目
18、标点,影响到目标检测的效果。背景差分法的流程如下所示:(fk-bk)>Dk->二值化->形态学滤波->连通性滤波->判别退出对应的函数为:void Cvision:OnBtnExit() / TODO: Add your control notification handler code herecvDestroyWindow("Video");cvDestroyWindow("Background");cvDestroyWindow("Foreground");CDialog:EndDialog(1);
19、退出时将所有窗口和对话框一起销毁,退出所执行的程序。下图为实验效果图:实验中遇到的问题及其解决办法:在实验程序完成编写并改正语法及逻辑错误后,编译->连接->执行,无法打开视频,多次检查仍无法解决问题。上网查询问题的所在,经过反复尝试后发现计算机中没有安装匹配的视频播放器,从网上下载klcodecfbeta进行安装问题得到解决,顺利实现视频的读取及简单处理(视频运动检测)。通过本次实验提高了自己的动手能力及独自发现问题解决问题的能力。在完成此次课程设计的过程中遇到了很多问题,通过自己的思考,和同学的讨论以及查找资料都一一得到解决,提高了自己的动手能力和独立思考问题解决问题的能力。在
20、设计过程中复习了C、C+编程语言的语法,熟悉了VC+的基本操作并近一步理解了图像处理的各种处理方法及算法使书本知识和应用得到结合并达到了学以致用。在设计过程中由于粗心犯了很多错误特别是Opencv的配置方面,得到的教训是做事情一定要认真细心决不能敷衍应付。本文力图用简洁明了的语言描述自己在完成此次课程设计的过程及经验总结,但仍有一些地方语言或表达不太清楚,望老师批评指正。参考文献姚敏 数字图像处理 机械工业出版社冈萨雷斯 数字图像处理 电子工业出版社钱能 C+ 程序设计教程 清华大学出版社opencv-doc-cn-0.9.7 OpenCV说明文档Hieu T.Nguyen, Arnold W
21、.M. Smeulders, Fast Occluded Object Tracking by a Robust Appearance Filter, 2004 IEEEGary R. Bradski, Microcomputer Research Lab, Santa Clara, CA, Intel Corporation, Computer Vision Face Tracking For Use in a Perceptual User Interface源程序代码如下:/ aa.cpp : Defines the class behaviors for the application
22、./#include "stdafx.h"#include "aa.h"#include "vision.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAaAppBEGIN_MESSAGE_MAP(CAaApp, CWinApp)/AFX_MSG_MAP(CAaApp)/ NOTE - the ClassWizard will add and remove mapping macros here./
23、 DO NOT EDIT what you see in these blocks of generated code!/AFX_MSGON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CAaApp constructionCAaApp:CAaApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CAaApp objectCAaApp theApp;/ CAaApp
24、initializationBOOL CAaApp:InitInstance()AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dC
25、ontrols();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically#endifCvision dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)/ TODO: Place code here to handle when the dialog is/ dismissed with OKelse if (nResp
26、onse = IDCANCEL)/ TODO: Place code here to handle when the dialog is/ dismissed with Cancel/ Since the dialog has been closed, return FALSE so that we exit the/ application, rather than start the application's message pump.return FALSE;/ vision.cpp : implementation file/#include "stdafx.h&q
27、uot;#include "aa.h"#include "vision.h"#include "cvapp.h"#include <cv.h>#include <cxcore.h>#include <highgui.h>#include "CBitmapEx.h"#include "Ipl2DIB.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_
28、;#endif/ Cvision dialogCvision:Cvision(CWnd* pParent /*=NULL*/): CDialog(Cvision:IDD, pParent)/AFX_DATA_INIT(Cvision)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INITvoid Cvision:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(Cvision)/ NOTE: the C
29、lassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(Cvision, CDialog)/AFX_MSG_MAP(Cvision)ON_BN_CLICKED(IDC_BUTTON1, OnOpen)ON_BN_CLICKED(IDC_BUTTON2, OnProcess)ON_BN_CLICKED(IDC_BTN_EXIT, OnBtnExit)/AFX_MSG_MAPEND_MESSAGE_MAP()/ Cvision message handlersvoid Cvision:OnOpen() CFi
30、leDialog dlg(TRUE, _T("*.bmp"), "", OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, "AVI files (*.avi) |*.avi|All Files (*.*)|*.*|",NULL); char title= "Open Image" dlg.m_ofn.lpstrTitle= title; if (dlg.DoModal() = IDOK) CString path= dlg.GetPathName();/声明
31、IplImage指针IplImage* pFrame = NULL;IplImage* pFrImg = NULL;IplImage* pBkImg = NULL;CvMat* pFrameMat = NULL;CvMat* pFrMat = NULL;CvMat* pBkMat = NULL;CvCapture* pCapture = NULL;int nFrmNum = 0;/打开AVI视频文件if(path="") /判断文件路径是否为空MessageBox("请先选择AVI视频文件!");return;elseif(!(pCapture = cv
32、CaptureFromFile(path)MessageBox("打开AVI视频文件失败!");return;/创建窗口cvNamedWindow("Video", 1);cvNamedWindow("Background",1);cvNamedWindow("Foreground",1);/使窗口有序排列,窗口宽330cvMoveWindow("Video", 30, 0);cvMoveWindow("Background", 360, 0);cvMoveWindow(&q
33、uot;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), IPL_DEPTH_8U,1);
34、 / 存放中间图像(灰度)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_BGR2GRAY);cvConvert(pFrImg, pFrameMat);cvConvert(pFrImg, pFrMat);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年劳资专员试题及答案
- 年度保密工作总结
- 糖尿病专科护士考试试题(附答案)
- 选矿集控工操作考核试卷及答案
- 建设工程施工合同纠纷要素式起诉状模板资深律师修订版
- 保温防腐工程纠纷专用!建设工程施工合同纠纷要素式起诉状模板
- 2026 年离婚协议书 2026 版专业规范版
- 钟山风景名胜区旅游服务中心项目塔式起重机基础专项施工方案
- 定制家居员工年终总结(3篇)
- 电石生产副总年终总结(3篇)
- 第四单元地理信息技术的应用课件 【高效课堂+精研精讲】高中地理鲁教版(2019)必修第一册
- 鲁科版高中化学必修一教案全册
- 管理养老机构 养老机构的服务提供与管理
- 提高隧道初支平整度合格率
- 2022年环保标记试题库(含答案)
- 2023年版测量结果的计量溯源性要求
- 建筑能耗与碳排放研究报告
- GB 29415-2013耐火电缆槽盒
- 中国古代经济试题
- 真空采血管的分类及应用及采血顺序课件
- 软件定义汽车:产业生态创新白皮书
评论
0/150
提交评论