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 ...
随机推荐
- Android ImageView的属性android:scaleType
ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType) imageView.setScaleType(Im ...
- SPOJ3267 D-query 离线+树状数组 在线主席树
分析:这个题,离线的话就是水题,如果强制在线,其实和离线一个思路,然后硬上主席树就行了 离线的代码 #include <iostream> #include <stdio.h> ...
- Datatable转换成List实体对象列表 几个实例
一, /// <summary> /// 将Datatable转换为List集合 /// </summary> /// <typeparam name="T&q ...
- 【转】小解DCT与DFT
这学期当本科生数字图像处理的助教老师,为使学生更好地理解DCF和DFT之间的关系给出三题,大家可以思考一下,看一下自己对这些最简单的变换是否真正理解. 1.求解序列f(n)=[2,3,3,4,4,3, ...
- Java笔记(五)……运算符
算术运算符 算术运算符的注意问题: 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1.但被模数是负数就另当别论. 对于除号"/",它的整数除和小数除是有区别的:整数之间做除 ...
- java枚举enum
http://www.cnblogs.com/wenruo/p/5349614.html java的枚举通过关键字enum实现.可以理解为一个类,不过这个类由编译器自动加了一些方法. static v ...
- 问题-Error creating object. Please verify that the Microsoft Data Access Components 2.1(or later) have been properly installed.
问题现象:软件在启动时报如下错误信息:Exception Exception in module zhujiangguanjia.exe at 001da37f. Error creating obj ...
- mac下firefox复制粘贴失效解决办法
现象:复制粘贴只能在firefox上操作,也就是其他应用内的内容无法复制到firefox,firefox的内容也无法复制其他应用,但是firefox自己的内容可以复制本身(比如各个tab页之间复制) ...
- Yii2 TimestampBehavior行为
<?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * ...
- Android源码分析-消息队列和Looper
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17361775 前言 上周对Android中的事件派发机制进行了分析,这次博主 ...