无法在OpenCV中读取视频文件
Unable to read video file in OpenCV
我正在尝试捕获视频并将其存储在文件中,然后读取相同的视频文件。我能够编写它,但无法读取同一文件。在按下逃生时,该程序应该退出网络摄像头并播放录制的视频,但会显示以下错误:
mpeg1video @ 0x2a16f40] ac-tex在14 28损坏 [mpeg1video @ 0x2a16f40]警告MVS不可用 OPENCV错误:糟糕的标志(参数或结构字段)(未识别或不支持的数组类型),cvgetMat,file/home/ujjwal/downloads/opencv-2.4.0/modules/core/src/array.cpp,第2482行, 扔出" cv ::异常"的实例后终止命令 what():/home/ujjwal/downloads/opencv-2.4.0/modules/core/src/array.cpp:2482:错误:( - 206)函数cvgetmat
中未认识或不支持的阵列类型
代码是:
#include <sstream>
#include <string>
#include <iostream>
#include <opencv/highgui.h>
#include <opencv/cv.h>
using namespace cv;
int main(int argc, char* argv[])
{
Mat inputVideo;
Mat frame;
Mat HSV;
Mat tracking;
char checkKey;
VideoCapture capture;
capture.open(0);
capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,480);
VideoWriter writer("OutputFile.mpeg", CV_FOURCC('P','I','M','1'), 50, Size(640, 480));
while(1){
capture.read(inputVideo);
imshow("Original Video",inputVideo);
writer.write(inputVideo);
checkKey = cvWaitKey(20);
if(checkKey == 27)
break;
}
capture.open("OutputFile.mpeg");
capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,480);
while(1){
capture.read(inputVideo);
imshow("Tracking Video", inputVideo);
}
return 0;
}
有人可以帮我吗?谢谢!
您需要纠正几件事才能使它起作用:
-
您必须在窗口中显示图像之前创建窗口。
-
您必须关闭作者才能完成写作,然后再打开。
-
您需要为显示的第二张图像添加
cvWaitKey(20)
(请在此处查看为什么这是必不可少的)。
整个固定代码如下:
#include <sstream>
#include <string>
#include <iostream>
#include <opencv/highgui.h>
#include <opencv/cv.h>
using namespace cv;
int main(int argc, char* argv[])
{
Mat inputVideo;
Mat frame;
Mat HSV;
Mat tracking;
char checkKey;
VideoCapture capture;
capture.open(0);
capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,480);
VideoWriter writer("OutputFile.mpeg", CV_FOURCC('P','I','M','1'), 50, Size(640, 480));
namedWindow("Original Video", WINDOW_AUTOSIZE );
while(1){
capture.read(inputVideo);
imshow("Original Video",inputVideo);
writer.write(inputVideo);
checkKey = cvWaitKey(20);
if(checkKey == 27)
break;
}
writer.release();
capture.open("OutputFile.mpeg");
capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,480);
namedWindow("Tracking Video", WINDOW_AUTOSIZE );
while(1){
capture.read(inputVideo);
if (!inputVideo.empty())
{
imshow("Tracking Video", inputVideo);
checkKey = cvWaitKey(20);
}
else
break;
}
return 0;
}
相关文章:
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 使用 OpenCV 读取视频帧到指定的指针 (C++)
- 无法从文件中读取视频,而可以从相机读取
- 读取视频文件"Open CV WARNING: Couldn't read movie file bird.avi"时出现问题
- 无法在OpenCV中读取视频
- openCV读取.avi文件的视频捕获获取空框架
- 从文件OpenCV读取视频
- 无法在OpenCV中读取视频文件
- 在 OpenCV 2.4.2 中从 CIF 视频读取帧
- 从文件中读取视频时 opencv 的分段错误
- DirectShow和openCV.读取视频文件并进行处理
- 用循环(从opencv读取视频)停止QThread的正确方法
- 如何以灰度格式读取视频文件
- 在opencv中读取视频文件的连续图像
- 我如何读取视频文件在openCV中使用
- OpenCV读取视频/图像没有压缩/改变
- FFMPEG -读取视频文件并转换为位图
- 如何读取视频的亮度和对比度
- 如何读取视频元数据(C/ c++)
- 读取视频文件与OpenCV videoccapture