2010-07-26 74 views
0

每當我試圖讀出的AVI文件,並在Windows XP中使用opencv 2.1和VS 2008轉換成grayscal未知錯誤而讀AVI文件在OpenCV中

我不爲什麼我收到以下運行時錯誤在同一時間,我無法得到它的幫助

ERROR 1

[NULL @ 0x37da10]無效和 低效VFW-AVI包裝B幀 檢測FPS = 23幀(瓦特,h)=(640 , 272)Output#0,avi,to'test.avi': Stream#0.0:Video:mpeg4,yuv420p, 640x272,q = 2-31,11141kb/s,90k tbn, 23 .98 tbc [MPEG4 @ 0x37f920]除去幀率 共同因素[MPEG4 @ 0x37da10]無效和低效 VFW-AVI包裝B幀檢測 編譯器未對準堆棧 變量。 Libavcodec已被編譯錯誤並且可能非常慢或者 崩潰。這不是libavcodec中的 中的錯誤,而是編譯器中的錯誤。您可能會嘗試使用gcc> = 4.2重新編譯。 不要向FFmpeg 開發者報告崩潰。 [MPEG4 @ 0x37da10]無效 和低效VFW-AVI填充乙 幀中檢測

如果我嘗試一些其他avi文件然後我得到以下運行時錯誤

ERROR 2

fps = 15幀(w,h)=(176,184) 輸出#0,avi,到'demo.avi': 流#0.0:視頻:mpeg4,yuv420p,176x184,q = 2-31,2072 kb/s, 90k tbn,15 tb c編譯器未對齊 堆棧變量。 Libavcodec已被編譯錯誤並且可能非常慢或者 崩潰。這不是libavcodec中的 中的錯誤,而是編譯器中的錯誤。您可能會嘗試使用gcc> = 4.2重新編譯。 不要向FFmpeg 開發者報告崩潰。

我真的不知道什麼是這裏發生了從學習OpenCV的我的代碼,

// VideoCon.cpp : Defines the entry point for the console application. 


#include "stdafx.h" 


#include <cv.h> 
#include <highgui.h> 
#include <stdio.h> 



int main(int argc, char* argv[]) { 
    cvNamedWindow("Example2_10", CV_WINDOW_AUTOSIZE); 
    cvNamedWindow("Log_Polar", CV_WINDOW_AUTOSIZE); 
    CvCapture* capture = cvCreateFileCapture("Rambo.avi"); 
    if (!capture){ 
     return -1; 
    } 
    IplImage* bgr_frame; 
    double fps = cvGetCaptureProperty (
     capture, 
     CV_CAP_PROP_FPS 
    ); 
printf("fps=%d\n",(int)fps); 

    CvSize size = cvSize(
     (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), 
     (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT) 
    ); 

    printf("frame (w, h) = (%d, %d)\n",size.width,size.height); 
    #ifndef NOWRITE 
    CvVideoWriter* writer = cvCreateVideoWriter( 
    // On linux Will only work if you've installed  ffmpeg development files correctly, 
     "test.avi",        
    // otherwise segmentation fault. Windows probably better. 
     CV_FOURCC('D','X','5','0'),  
     fps, 
     size 
    ); 
#endif 
    IplImage* logpolar_frame = cvCreateImage(
     size, 
     IPL_DEPTH_8U, 
     3 
    ); 

    IplImage* gray_frame = cvCreateImage(
     size, 
     IPL_DEPTH_8U, 
     1 
    ); 

    while((bgr_frame=cvQueryFrame(capture)) != NULL) { 
     cvShowImage("Example2_10", bgr_frame); 
     cvConvertImage( //We never make use of this gray image 
      bgr_frame, 
      gray_frame, 
      CV_RGB2GRAY 
     ); 
     cvLogPolar(bgr_frame, logpolar_frame, 
      //This is just a fun conversion the mimic's the human visual system 
        cvPoint2D32f(bgr_frame->width/2, 
        bgr_frame->height/2), 
        40, 
        CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS); 
     cvShowImage("Log_Polar", logpolar_frame); 
     //Sigh, on linux, depending on your ffmpeg, this often won't work ... 
#ifndef NOWRITE 
     cvWriteToAVI(writer, logpolar_frame); 
#endif 
     char c = cvWaitKey(10); 
     if(c == 27) break; 
    } 
#ifndef NOWRITE 
    cvReleaseVideoWriter(&writer); 
#endif 
    cvReleaseImage(&gray_frame); 
    cvReleaseImage(&logpolar_frame); 
    cvReleaseCapture(&capture); 
} 

回答

0

GUESS是,你不必在計算機上安裝正確的編解碼器。 嘗試安裝一些正確的編解碼器。

+0

如果他能夠播放視頻,那麼他已經安裝了正確的編解碼器。我建議你將這個問題提交給libavcoded郵件列表。 – karlphillip 2010-07-26 12:51:30

+0

幾個月前我有一個非常相同的問題。我能夠用VLC(內置編解碼器)播放電影,但opencv給了我一些廢話。 – MBZ 2010-07-26 12:53:56

+0

我安裝了Divx編解碼器,Xvid和ffdshow,現在m真的很沮喪,不知道還需要什麼 – Hunt 2010-07-26 13:12:30