Неизвестная ошибка при чтении файлов AVI в OpenCV - PullRequest
0 голосов
/ 26 июля 2010

всякий раз, когда я пытаюсь прочитать AVI-файл и преобразовать его в оттенки серого, используя Opencv 2.1 и VS 2008 в Windows XP

, я не понимаю, почему я получаю следующую ошибку во время выполнения в то же время, что и яневозможно получить справку по нему

ОШИБКА 1

[NULL @ 0x37da10] Обнаружены недопустимые и неэффективные упакованные vfw-avi B-кадры fps = 23 кадра (w, h) = (640, 272) Выход № 0, avi, в «test.avi»: Поток № 0.0: видео: mpeg4, yuv420p, 640x272, q = 2-31, 11141 кбит / с, 90 тыс. тбит, 23.98 tbc [mpeg4 @ 0x37f920] удаление общих факторов из частоты кадров [mpeg4 @ 0x37da10] Обнаружены неверные и неэффективные упакованные кадры vfw-avi B Компилятор не выровнял переменные стека.Libavcodec был неправильно скомпилирован и может работать очень медленно или зависать.Это не ошибка в libavcodec, а в компиляторе.Вы можете попробовать перекомпилировать, используя gcc> = 4.2.Не сообщайте о сбоях разработчикам FFmpeg.[mpeg4 @ 0x37da10] Обнаружены неверные и неэффективные упакованные в vfw-avi B-кадры

, если я попробую другой avi-файл, то получаю следующую ошибку времени выполнения

ERROR 2

fps = 15 кадров (ш, ч) = (176, 184) Выходной сигнал от 0, avi, до 'demo.avi': Поток # 0.0: Видео: mpeg4, yuv420p, 176x184, q = 2-31, 2072 кбит / с, 90 тыс. тбит, 15 тбн. Компилятор не выровнял переменные стека.Libavcodec был неправильно скомпилирован и может работать очень медленно или зависать.Это не ошибка в libavcodec, а в компиляторе.Вы можете попробовать перекомпилировать, используя gcc> = 4.2.Не сообщайте о сбоях разработчикам FFmpeg.

Я действительно не знаю, что здесь происходит, мой код из Learning 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 );
}

1 Ответ

0 голосов
/ 26 июля 2010

my GUESS означает, что на вашем компьютере не установлены нужные кодеки. попробуйте установить правильные кодеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...