OpenCV显示编码在I420中的avi文件
OpenCV displaying avi file encoded in I420
我正试图使用OpenCV 2.4.2(在Windows 7上的Visual C++2010学习版中)编写视频处理应用程序,但在显示某些AVI文件时遇到问题。大多数显示正确,但当我使用以I420格式编码的AVI文件时,我得到的只是每帧的条纹粉红色图像(它在常规媒体播放器中正确显示)。
显示的输出:https://i.stack.imgur.com/f15hM.png
目前,我正在使用C++API,但当我使用C API时也会发生同样的事情(本页代码:http://nashruddin.com/how_to_play_avi_files_with_opencv)。我觉得这很奇怪,因为在这个网站上的大多数答案和网络上的资源中,他们明确建议使用I420编码。有人知道是什么原因导致的,或者如何解决吗?
以下是我正在使用的代码的精简版本:
int main(int argc, char** argv){
string fname = "test.avi";
VideoCapture capture(fname);
if(!capture.isOpened()){
cerr << "error opening " << fname << endl;
return -1;
}
Mat frame;
namedWindow("output");
double rate = capture.get(CV_CAP_PROP_FPS);
int delay = 1000/rate;
while(true){
if(!capture.read(frame)) break;
cv::imshow("output", frame);
if(waitKey(delay) >= 0) break;
}
capture.release();
return 0;
}
如果有区别的话,我使用的是OpenCV的预编译版本(http://sourceforge.net/projects/opencvlibrary/)。
好的,所以我设法在另外几台计算机上进行了测试。一台刚刚坠毁,在另一台上,视频播放得很好。事实证明,在默认的OpenCV编译中启用FFMPEG存在未压缩AVI问题。在禁用FFMPEG的情况下重新编译OpenCV,或者只使用不同的编解码器来压缩视频。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 以上全高清分辨率的帧丢失.在MediaFoundation中有AVI解压缩器转换过滤器吗
- OpenCV显示编码在I420中的avi文件
- C++/OpenCV中视频的AVI大小(千字节)