在参加一个软件比赛需要用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读取视频一闪而过情况分析的更多相关文章

  1. opencv 读取视频内容写入图片帧

    现在主要把自己平时用到的opencv功能记录到博客,一方面方便自己有时间来回顾,另一方便提供给大家一个参考. opencv 读取视频内容,把视频帧每一帧写成图片,存入电脑中.这个步骤是许多数据处理的基 ...

  2. 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)

    OpenCV中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API. 1.VideoCapture类的构造函数: C++: VideoCapture::VideoCapt ...

  3. Opencv读取视频

    CvCapture 是一个结构体,用来保存图像捕获所需要的信息. opencv提供两种方式从外部捕获图像 一种是从摄像头中, 一种是通过解码视频得到图像. 两种方式都必须从第一帧开始一帧一帧的按顺序获 ...

  4. C/C++ OpenCV读取视频与调用摄像头

    原文:http://blog.csdn.net/qq78442761/article/details/54173104 OpenCV通过VideoCapture类,来对视频进行读取,调用摄像头 读取视 ...

  5. python+opencv读取视频,调用摄像头

    引用 import cv2 import numpy 创建摄像头对象 cap = cv2.VideoCapture("videoTest/test1.mp4") #参数为视频文件目 ...

  6. OpenCV 读取视频 多种方式

    OpenCV中常见的视频方式是while循环读取,可是,当遇到嵌套循环呢 1.常见的while循环 ,没有嵌套循环 cv::VideoCapture capture("d:/test/dem ...

  7. Linux OpenCV读取视频失败,cvCreateFileCapture失败的解决

    背景: 近期想在嵌入式平台上开发QT+Opencv,无料PC机上编写的OpenCV程序老是打不开视频. 開始提示:OpenCV Error: Bad argument (Array should be ...

  8. C++ 调用 opencv 读取视频文件列表并处理

    //g++ trans_video.cpp -o trans_video `pkg-config opencv --libs --cflags` -L/usr/lib/x86_64-linux-gnu ...

  9. OpenCV3读取视频或摄像头

    我们可以利用OpenCV读取视频文件或者摄像头的数据,将其保存为图像,以用于后期处理.下面的实例代码展示了简单的读取和显示操作: // This is a demo introduces you to ...

随机推荐

  1. STL for_each()

    http://www.cplusplus.com/reference/algorithm/for_each/ std::move()用于c++11 http://www.cplusplus.com/r ...

  2. 新浪微博2.5.1 for Android 去广告

    新浪微博更新到2.5.1版,就开始来广告了,伤不起啊... 亲,看到没,手机屏幕就那么一小块,还要往里面塞东西,另外是一个在后台运行的AdCenter服务. 所需要用到的工具有:apktool,JD- ...

  3. [liu yanling]测试用例的设计方法

    一.功能测试      1.对话框测试输入进行测试.包括中文字符.英文字符.数字字符.特殊字符.及几种字符的组合.      2.对界面可操作按钮进行测试.包括[新增(N)][保存(S)][修改(M) ...

  4. 【HTML】Intermediate2:Text: AbbreviationsQuotations Code

    1.</abbr> attribute:title 2.Quotations blockquote :standalone often multi-line quotations-cite ...

  5. linux 安装java环境(jdk)

    第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...

  6. c#文件转化byte数组

    public static byte[] ReadFile(string fileName) { if (!File.Exists(fileName)) { throw new Exception(& ...

  7. Storm系列(二)系统结构及重要概念

    在Storm的集群里面有两种节点:控制节点和工作节点,控制节点上面运行Nimbus进程,Nimbus负责在集群里面分配计算任务,并且监控状态.每一个工作节点上面运行Supervisor进程,Super ...

  8. E297: Write error in swap file解决方法

    vi打开配置文件后显示E297: Write error in swap file,检查磁盘发现磁盘满了.使用du –max-depth=1 | sort –n –r 查找大文件所在位置并删除.

  9. POJ 3295 Tautology (构造题)

    字母:K, A, N, C, E 表示逻辑运算 字母:p, q, r, s, t 表示逻辑变量 0 或 1 给一个字符串代表逻辑表达式,如果是永真式输出tautology 否则输出not 枚举每个逻辑 ...

  10. PHP魔术方法总结

    1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $property, $value ...