OpenCV读取AVI文件
来源:互联网 发布:种植牙的步骤 知乎 编辑:程序博客网 时间:2024/04/29 22:45
转自http://hq.huang.blog.163.com/blog/static/1066821912009758958885/
今天看到网上很多人问,cvCreateFileCapture读取avi,为什么总是返回NULL. 我查了查文献,总结如下:
(源程序附在最下)
问题:为什么我的电脑支持AVI或者能够播出AVI,但为什么使用cvCreateFileCapture函数总返回NULL呢?
答案:尽管是AVI文件,但也可能使用了某种codec,例如:MJPEG Decompressor。 需要把它转换OpenCV支持的AVI文件. 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. 保存完毕。
(注:成功使用。)
大家可以测试一下。如果还是不行,请回复,共同讨论一下。
我的源代码,(VS C++ 2008 Expression, WinXP sp3, )
//------------------------------------------------------------------------------------------------
#include "stdafx.h"
#include <iostream>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
using namespace std;
int main(int argc, char** argv[])
{
int key=0;
char* filename="D:/fruit.avi";
CvCapture* capture = cvCreateFileCapture(filename);
double fps=cvGetCaptureProperty(capture, CV_CAP_PROP_FPS );
cout<<"fps="<<fps<<endl;//print the frame rate per second
if(capture==NULL) {
cout<<"NO capture"<<endl;
char a=getchar();
return 1;
};
IplImage* frame;
cvNamedWindow("PlayAVI", CV_WINDOW_AUTOSIZE);
while(1) {
frame = cvQueryFrame( capture );
if(!frame) break;
cvShowImage("PlayAVI", frame );
key = cvWaitKey(33);// quit when users press 'ESC'
if( key == 27 ) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("PlayAVI");
return 0;
}
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV 读取avi文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件(转)
- AVI编码方式及OpenCV读取AVI文件-解决opencv无法读AVI视频的问题
- AVI编码方式及OpenCV读取AVI文件-解决opencv无法读AVI视频的问题
- OpenCV读取AVI
- OpenCV读取AVI帧至Mat
- OpenCV读取AVI文件(HOG)---主要的方法,就是把不能识别的AVi格式,转换成OpenCv可以识别的AVI格式!
- opencv写入AVI文件[8]
- 090902c语言日记(指针,数组)
- [收藏] "您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序。" 错误解决
- LUA源码阅读之词法分析
- 卷积
- SQL小技巧---如何又快又简单的得到你的数据库每个表的记录数
- OpenCV读取AVI文件
- 事务机制
- 嵌入式Linux下真彩Logo的实现
- 控制语句(for...end)
- .NET - SOAP 090902
- DB2在线增量备份 恢复增量备份及前滚恢复
- 国标网线制作方法
- 最简单client和server通信程序
- Linux "could not open default font 'fixed'."错误解决