Opencv读取视频一闪而过情况分析
在参加一个软件比赛需要用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 读取视频内容写入图片帧
现在主要把自己平时用到的opencv功能记录到博客,一方面方便自己有时间来回顾,另一方便提供给大家一个参考. opencv 读取视频内容,把视频帧每一帧写成图片,存入电脑中.这个步骤是许多数据处理的基 ...
- 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)
OpenCV中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API. 1.VideoCapture类的构造函数: C++: VideoCapture::VideoCapt ...
- Opencv读取视频
CvCapture 是一个结构体,用来保存图像捕获所需要的信息. opencv提供两种方式从外部捕获图像 一种是从摄像头中, 一种是通过解码视频得到图像. 两种方式都必须从第一帧开始一帧一帧的按顺序获 ...
- C/C++ OpenCV读取视频与调用摄像头
原文:http://blog.csdn.net/qq78442761/article/details/54173104 OpenCV通过VideoCapture类,来对视频进行读取,调用摄像头 读取视 ...
- python+opencv读取视频,调用摄像头
引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...
- OpenCV 读取视频 多种方式
OpenCV中常见的视频方式是while循环读取,可是,当遇到嵌套循环呢 1.常见的while循环 ,没有嵌套循环 cv::VideoCapture capture("d:/test/dem ...
- Linux OpenCV读取视频失败,cvCreateFileCapture失败的解决
背景: 近期想在嵌入式平台上开发QT+Opencv,无料PC机上编写的OpenCV程序老是打不开视频. 開始提示:OpenCV Error: Bad argument (Array should be ...
- C++ 调用 opencv 读取视频文件列表并处理
//g++ trans_video.cpp -o trans_video `pkg-config opencv --libs --cflags` -L/usr/lib/x86_64-linux-gnu ...
- OpenCV3读取视频或摄像头
我们可以利用OpenCV读取视频文件或者摄像头的数据,将其保存为图像,以用于后期处理.下面的实例代码展示了简单的读取和显示操作: // This is a demo introduces you to ...
随机推荐
- [King.yue]Ext.NET相比WebForm的优势
1)更好的用户体验.(生产力++) 虽然WebForm可以使用微软的Ajax以及Ajax控件进行开发,但是用户体验还是远远不及extjs.而且你可以跟客户忽悠,这个功能多么滴难做,多么好,但是我们做出 ...
- Frank自动化测试
记得是夏天的时候去参加一个infoQ的论坛,里面有一个朋友强烈推荐Frank测试框架.所以趁着年底赶紧学一下.这中间需要ruby的基础. 安装过程:1.安装frank-cucumber 命令: sud ...
- TextField笔记
今天写scrollPanel组件,碰到一个问题:textfield自动什么时候会调节高度. 在创建TextField的时候,我制定了文本的height属性. 之后,无论怎么设置文本,height总是不 ...
- linux驱动程序之电源管理 之linux休眠与唤醒(2)
在Linux中,休眠主要分三个主要的步骤:(1)冻结用户态进程和内核态任务:(2)调用注册的设备的suspend的回调函数:(3)按照注册顺序休眠核心设备和使CPU进入休眠态. 冻结进程是 ...
- Import the Add Email and Post Configuration to the SiteMap managed solution -Dynamices CRM
We have prepared a managed solution named Add Email and Post Configuration to SiteMap that you can i ...
- HDU5407.CRB and Candies(数论)
官方题解: The problem is just to calculate g(N) = LCM(C(N,0),C(N,1),...,C(N,N)) Introducing function f(n ...
- 【三支火把】---C文件学习
---恢复内容开始--- 又看了一遍文件的知识点了,断断续续已经看了2-3遍,也就这次花了点时间做了一下总结,以后我想都不会再去翻书了,哈哈. 1. 基于缓冲区的文件操作2. 打开关闭文件3. 单个字 ...
- Ubuntu 12.04 64bit 配置完android 5.0编译环境后出现“could not write bytes: Broken pipe.”而无法进入输入帐号密码的登陆界面
Ubuntu 12.04 64bit 配置完android 5.0编译环境后出现“could not write bytes: Broken pipe.”而无法进入输入帐号密码的登陆界面.上网问了问百 ...
- java21 封装Response:
封装Response: /** * 封装响应信息 */ public class Response { //两个常量 public static final String CRLF="\r\ ...
- direct3D directX
direct3D只是directX其中一个增强功能 DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分.声音部分.输入部分和网络部分. 显示部分担任图形处理的关键,分为Dir ...