Opencv读取视频一闪而过情况分析

系统 1508 0

在参加一个软件比赛需要用opencv对视频的处理,也碰到了一些问题。

最常见的就是视频一闪而过了,在网上查了好久都没解决,

最后重装在配置环境变量时发现的。

现在我来终结一下估计是比较全的了。

先说明我用的是vs2012+opencv(2.4.8),c++编程;

关于配置就不说了网上很多

代码如下:

 

      #include"highgui.h"

#include"cv.h"



//声明一个CvCapture类型指针 用于接收cvCreateFileCapture的返回值

CvCapture* g_capture = NULL;

//记录滚动条的当前位置

int g_slider_pos = 0 ;

//对视频帧进行计数的变量

int frame_count = 0;



//滚动条的回调函数 参数int pos 是指当前滚动条所在位置

void on_changed(int pos)

{

//设置g_capture的属性 使得 从位置pos开始播放视频

cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);

//在拉动滚动条后 保持变量frame_count与滚动条的位置是同步的 

frame_count = pos ;

}



int main(int argc,char* argv[])

{

//创建一个窗口 

cvNamedWindow( "show");

//打开有一个视频文件

g_capture=cvCreateFileCapture("D:\\car.mp4");

//获取视频的总帧数

int frames=(int )cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);



if(frames>0)

{

//在窗口show上创建名字为Position的滚动条

cvCreateTrackbar( "Position","show" ,&g_slider_pos,frames,on_changed);

} 



//图像指针变量

IplImage* frame;



while(1)

{

//从g_capture获取一帧图像 填充到相应的内存缓冲区

frame=cvQueryFrame(g_capture);

//如果到视频结尾 则退出循环

if(!frame) break ;

//显示图像

cvShowImage( "show",frame);

//接收用户按键

char c = cvWaitKey(33);

//如果接收到 按键'Esc' 则退出循环

if(c==27)

break;

//滚动条 随着视频的播放 进行移动

cvSetTrackbarPos( "Position","show" ,frame_count);

frame_count++;

}

//释放资源

cvReleaseCapture(&g_capture);

cvDestroyWindow( "show");

return 0;

}


    

1.网上很多说是avi格式问题, 尽管是AVI文件, 需要把它转换OpenCV支持的AVI文件.

(这是copy网上的)

OpenCV支持的AVI如下:

Container

FourCC

Name

Description

AVI

'DIB '

RGB(A)

Uncompressed RGB, 24 or 32 bit

AVI

'I420'

RAW I420

Uncompressed YUV, 4:2:0 chroma subsampled

AVI

'IYUV'

RAW I420

identical to I420

转换格式解决方法:

解决方法1: 下载mencoder.exe , 在window命令行下使用: mencoder in.avi -ovc raw -vf format=i420 -o out.avi

解决方法2: 下载VitualDub , 我使用1.9.4版本a. File->Open Video File;b. Video->Filters->Add->Convert format;

选择4:2:0 Planar YCbCr (YV12)或者 32-Bit RGB。c. Save as AVI. 保存完毕。”

还有网上说opencv只支持avi格式至少我现在用的2.4.8还能支持MP4格式了,还跑得不错。

2.最后就是在配置环境变量时path路径一定要看清楚是否写对,

Opencv读取视频一闪而过情况分析

否则同样的代码和视频文件在别人电脑上跑得好好的就你的有问题,可能就是这个问题了。

好了这是我写的第一篇博客,写的不好多多见谅!!!

 

Opencv读取视频一闪而过情况分析


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论