无法在 OpenCV 中读取视频文件

Posted

技术标签:

【中文标题】无法在 OpenCV 中读取视频文件【英文标题】:Unable to read video file in OpenCV 【发布时间】:2014-01-26 06:57:13 【问题描述】:

我正在尝试捕获视频并将其存储在文件中,然后读取相同的视频文件。我可以写它但不能读取同一个文件。按退出键时,程序应该退出网络摄像头并播放录制的视频,但显示以下错误:

mpeg1video @ 0x2a16f40] ac-tex 在 14 28 损坏 [mpeg1video @ 0x2a16f40] 警告 MV 不可用 OpenCV 错误:cvGetMat,文件 /home/ujjwal/Downloads/OpenCV-2.4.0/modules/core/src/array.cpp,第 2482 行中的错误标志(参数或结构字段)(无法识别或不支持的数组类型) 在抛出 'cv::Exception' 的实例后调用终止 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;

有人可以帮帮我吗?谢谢!

【问题讨论】:

【参考方案1】:

您需要更正几件事以使其正常工作:

    您必须先创建窗口,然后才能在窗口中显示图像。

    您必须先关闭编写器才能完成写入,然后再打开它。

    您需要添加cvWaitKey(20) 以显示第二张图片(查看here 了解为什么这是必不可少的)。

整个固定代码如下:

#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;

【讨论】:

谢谢!我很粗心。

以上是关于无法在 OpenCV 中读取视频文件的主要内容,如果未能解决你的问题,请参考以下文章

关于opencv读取图片、视频总是窗口一闪不出图、视频的问题

OpenCV—读取视频,显示视频,保存视频

无法在 Windows 7 机器中使用 OpenCV 2.4.3、Python 2.7 打开“.mp4”视频文件

opencv--视频操作

在opencv中读取视频文件的连续图像

从文件中读取视频时opencv的分段错误