### opencv视频读取完整程序知识点解析 #### 一、OpenCV简介 OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,它包含了大量用于图像处理与计算机视觉的函数。OpenCV支持多种编程语言,如C++、Python等,并且在Windows、Linux以及Mac OS等操作系统上均有良好的兼容性。 #### 二、VS2008环境配置 本程序是在Visual Studio 2008环境下使用OpenCV 2.0进行编译和测试的。在VS2008中配置OpenCV主要涉及以下步骤: 1. **下载OpenCV**:首先从官方网站或GitHub下载OpenCV 2.0的源码包。 2. **配置路径**: - 将OpenCV的`bin`目录添加到系统环境变量`PATH`中。 - 在VS2008项目属性中,将OpenCV的`lib`目录添加到“链接器”->“常规”->“附加库目录”中。 - 将OpenCV的`include`目录添加到“配置属性”->“C/C++”->“常规”->“附加包含目录”中。 3. **添加库文件**:在项目的“链接器”->“输入”->“附加依赖项”中添加所需的OpenCV库文件,如`cv200.lib`、`cxcore200.lib`、`highgui200.lib`等。 #### 三、代码分析 ```cpp #include "stdafx.h" #include "highgui.h" void main() { /* 读取并显示图片示例 */ // IplImage* img = cvLoadImage("E:\\logo.png", 1); // cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE); // cvShowImage("Example1", img); // cvWaitKey(0); // cvReleaseImage(&img); // cvDestroyWindow("Example1"); // 读取并播放视频 IplImage* frame = NULL; cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE); CvCapture* capture = cvCreateFileCapture("video.avi"); while (1) { frame = cvQueryFrame(capture); if (!frame) break; cvShowImage("Example2", frame); char key = cvWaitKey(33); // 延时33毫秒,等待按键输入 if (key == 27) // 如果按Esc键,则退出循环 break; } cvReleaseCapture(&capture); cvDestroyWindow("Example2"); } ``` 1. **头文件引入**: - `#include "stdafx.h"`:预编译头文件,通常包含一些常用的头文件和宏定义,用以提高编译速度。 - `#include "highgui.h"`:HighGUI是OpenCV中的一个模块,提供了图形用户界面的功能,如创建窗口、显示图像等。 2. **创建窗口**: - `cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE)`:创建一个名为“Example2”的窗口,其中`CV_WINDOW_AUTOSIZE`表示自动调整窗口大小以适应图像。 3. **打开视频文件**: - `CvCapture* capture = cvCreateFileCapture("video.avi")`:通过`cvCreateFileCapture`函数打开指定路径下的视频文件`video.avi`。 4. **读取视频帧**: - `IplImage* frame = cvQueryFrame(capture)`:使用`cvQueryFrame`函数读取视频的一帧,该函数返回的是一个`IplImage`类型的指针,存储当前帧的信息。 5. **显示视频帧**: - `cvShowImage("Example2", frame)`:将读取到的帧显示在之前创建的窗口中。 6. **循环控制与退出条件**: - `char key = cvWaitKey(33);`:等待用户按键,如果按下了ESC键(`key == 27`)则退出循环。 7. **释放资源**: - `cvReleaseCapture(&capture)`:释放之前打开的视频捕获对象。 - `cvDestroyWindow("Example2")`:销毁之前创建的窗口。 #### 四、关键函数解释 - **cvLoadImage**:加载一张图片到内存中。 - **cvNamedWindow**:创建一个命名的窗口。 - **cvShowImage**:在指定的窗口中显示一张图像。 - **cvWaitKey**:等待用户按键,根据按键值执行不同的操作。 - **cvReleaseImage**:释放之前分配的图像内存。 - **cvDestroyWindow**:销毁一个命名的窗口。 #### 五、注意事项 - 在实际开发中,应确保正确配置OpenCV的环境变量和项目设置,避免出现链接错误等问题。 - 使用OpenCV处理视频时,需要注意视频格式的支持情况,部分视频编码可能需要额外安装插件或库才能支持。 - 在处理视频流时,合理设置循环内的延时时间(如`cvWaitKey`中的参数),以免程序运行过快导致视频播放不流畅。 - 处理完视频后及时释放资源,避免内存泄漏问题。 本程序展示了如何使用OpenCV在Visual Studio 2008环境下读取并播放一个AVI格式的视频文件。通过深入理解这些关键函数和概念,可以帮助开发者更好地利用OpenCV进行视频处理和分析。
#include "highgui.h"
void main()
{
/* IplImage* img=cvLoadImage("E:\logo.png",1);
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
cvShowImage("Example1",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example1");
//¶ÁȡͼÏñ
*/
IplImage* frame=NULL;
cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);
CvCapture* capture=cvCreateFileCapture("video.avi");
while(1)
{
frame=cvQueryFrame(capture);
if(!frame)
break;
cvShowImage("Example2",frame);
char key=cvWaitKey(33);
if(key==27)
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("Example2");
- wanglei10062012-11-14opencv中文论坛网站有的,只有主函数,没有调用的子函数
- 晴欣悦Duan2012-12-06opencv中文论坛网站有啊
- 粉丝: 1
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助