2014-01-26 64 views
0

我試圖捕獲視頻並將其存儲在一個文件中,然後讀取相同的視頻文件。我可以編寫它,但無法讀取同一個文件。在按Esc鍵,程序應該退出網絡攝像頭和播放錄製的視頻,但顯示以下錯誤,而不是:無法讀取OpenCV中的視頻文件

mpeg1video @ 0x2a16f40] ac-tex damaged at 14 28 [mpeg1video @ 0x2a16f40] Warning MVs not available OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /home/ujjwal/Downloads/OpenCV-2.4.0/modules/core/src/array.cpp, line 2482 terminate called after throwing an instance of 'cv::Exception' what(): /home/ujjwal/Downloads/OpenCV-2.4.0/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function 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; 
} 

有人可以幫我嗎?謝謝!

回答

2

您需要正確的幾件事情,使其工作:

  1. 您有一個顯示在窗口的圖像之前創建的窗口。

  2. 您必須關閉作者完成寫作,然後再打開它。

  3. 您需要添加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; 
} 
+0

謝謝!我很粗心。 – usb