linux opencv 显示视频文件夹,OpenCV播放视频并控制位置

cvGetCaptureProperty是我们需要使用到的获取视频属性的函数。

double cvGetCaptureProperty( CvCapture* capture, int property_id );

capture 视频获取结构。

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_HEIGHT-视频流中的帧高度

CV_CAP_PROP_FPS -    帧率

CV_CAP_PROP_FOURCC -   表示codec的四个字符

CV_CAP_PROP_FRAME_COUNT- 视频文件中帧的总数

函数cvGetCaptureProperty获得摄像头或者视频文件的指定属性。

译者注:有时候这个函数在cvQueryFrame被调用一次后,再调用cvGetCaptureProperty才会返回正确的数值。这是一个bug,建议在调用此函数前先调用cvQueryFrame。

cvCreateTrackbar(创建滚动条)

该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。

定义:

CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );

int cvCreateTrackbar( 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 Foo(int); 如果没有回调函数,这个值可以设为NULL。

函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。

被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的显示位置。

代码如下:

#include

#include

CvCapture* capture = NULL;

int pos=0;  //视频位置

void ON_Change(int n)

{

cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES,n);    //设置视频走到pos位置

}

int _tmain(int argc, _TCHAR* argv[])

{

cvNamedWindow("show");  //新建一个窗口

capture  =cvCreateFileCapture("F:\\TDDOWNLOAD\\10.Little.Asians.16\\fle-10la16a.avi");//创建一个视频

int frames = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);        //返回视频帧的总数

cvCreateTrackbar("frame","show",&pos,frames,ON_Change);//创建滚动条

IplImage * frame;//声明视频帧

while(1)

{

frame = cvQueryFrame(capture);  //获取下一帧图像

if (!frame)

{

break;          //如果不存在退出

}

pos++;              //播放一帧位置加1

//cvSetTrackbarPos("frame","show",pos);//设置进度条位置 加入此语句后视频会变卡

cvShowImage("show",frame);      //在窗口显示图像

char c = cvWaitKey(33);        //间隔33ms

if (c == 27)                    //如果按下Esc键中断

break;

}

cvReleaseCapture(&capture); //释放视频空间

cvDestroyWindow("show");    //销毁窗口

}

--------------------------------------分割线 --------------------------------------

--------------------------------------分割线 --------------------------------------

OpenCV的详细介绍:请点这里

OpenCV的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值