opencv学习笔记二

一、Opencv常用库文件的作用

1.cxcore:基础数据结构,数组结构,动态内存结构,绘图函数等

   Cv:图像处理,结构分析,运动分析目标跟踪,模式识别,摄像头定标等

   ML:机器学习(聚类,分类等)

   HighGUI:图像显示,视频读取等

   CvCam:摄像头接口(废除)

Cvaux:辅助性的不成熟的算法

二、Opencv读取视频

1.获取视频文件头信息 CvCapture* cvCreateFileCapture(char*);

获取文件信息,并分配一帧图像的内存.

2. 从摄像头或者文件中抓取并返回一帧

IplImage* cvQueryFrame(CvCapture*);

3.创建窗口并显示 void cvNamedWindow(char*);

void cvShowImage(char*,IplImage*);

4.释放内存 void cvReleaseCapture(CvCapture*);

          void cvDestroyWindow(char*);

注意:问题:CvCapture指针返回空,有可能是没有安装解码器。

三、常用函数

1.获取视频文件属性:doublecvGetCaptureProperty(Capture*,int);

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- 视频文件中帧的总数

 

2.修改视频播放的属性:cvSetCaptureProperty(Capture*,int,double);

3.创建跟踪条:

int cvCreateTrackbar(

const char* trackbar_name,

const char* window_name,

int* value,

int count,

CvTrackbarCallback on_change);


四、示例程序

#include "stdafx.h"

#include "cv.h"

#include "cxcore.h"

#include "highgui.h"

 

char*name = "D:\\我的文档\\Visual Studio2010\\Projects\\cv_read_video\\cv_read_video\\friend.avi";

CvCapture* cap = NULL;

intg_pos = 0;

voidon_change(int pos)

{

       cvSetCaptureProperty(cap,CV_CAP_PROP_POS_FRAMES,pos);

}

 

intmain()

{

       cvNamedWindow("window");

       cap =cvCreateFileCapture(name); //CvCreateFileCapture函数,获取视频信息的数据结构指针,并开辟空间

       int max = (int)cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_COUNT);//cvGetCaptureProperty函数获取视频的具体信息

       cvCreateTrackbar("bar","window",&g_pos,max,on_change);//cvCreateTrackbar函数创建Trackbar

       IplImage*frame = cvQueryFrame(cap); //cvQuery函数,读取下一祯

       while(1)

       {

              cvShowImage("window",frame);

              cvSetTrackbarPos("bar","window",g_pos);

              g_pos++;

              frame= cvQueryFrame(cap);

              char key = cvWaitKey(20); //cvWaitKey控制帧率

              if(key == 27) //判断是否是ESC

              {

                     break;

              }

       }

       cvReleaseCapture(&cap);

       cvDestroyWindow("window");

       return 0;

}

 

发布了39 篇原创文章 · 获赞 122 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章