Как запомнить предыдущее изображение с OpenCV в цикле? - PullRequest
1 голос
/ 30 декабря 2010

У меня есть около 300 изображений, которые я хочу обработать в цикле. В каждой итерации я хочу сравнить изображение с изображением из предыдущего цикла.

Я пытаюсь удержать текущее изображение в:

fIplImageHeader 

Изображение с предыдущей итерации сохраняется в:

lastFIplImageHeader 

Вот как я это делаю, и это дает мне исключение:

for ( int i = 0; i < 300; i++ )
{
        // get the path to an image (images are named 0.jpg, 1.jpg etc)
        // filePath.c_str() contains the path to an image

        // load the current image to an IplImage object
        IplImage* fIplImageHeader = cvLoadImage( filePath.c_str() );

        // create a header for te previous image
        IplImage* lastFIplImageHeader = cvCreateImageHeader( 
            cvSize( fIplImageHeader->width, fIplImageHeader->height ),
            fIplImageHeader->depth, fIplImageHeader->nChannels 
        );

        if ( NULL != lastFIplImageHeader->imageData )
        {
            // COMPARE IMAGES HERE
            // only if we are already in 2nd + iteration
        }

        // copy the current image to the lastFIplImageHeader
        // which will hold it in the next iteration
        if ( lastFIplImageHeader )
        {
            cvReleaseImage( &lastFIplImageHeader );
        }
        cvCopy(fIplImageHeader , lastFIplImageHeader);

        // do stuff

        if ( fIplImageHeader )
        {
            cvReleaseImage( &fIplImageHeader );
        }

}

Исключение:

First-chance exception at 0x753cb727 in Client.exe: Microsoft C++ exception: cv::Exception at memory location 0x0036ef5c.. 
Unhandled exception at 0x753cb727 in Client.exe: Microsoft C++ exception: cv::Exception at memory location 0x0036ef5c..

1 Ответ

1 голос
/ 30 декабря 2010

Я предлагаю вам загрузить первое изображение вне цикла и выполнить итерацию с i = 1.Вы не показали, как (если вообще) инициализировали lastFIplImageHeader и fIplImageHeader вне цикла.
В строке if ( NULL != lastFIplImageHeader->imageData ) нет теста, который сам по себе lastFIplImageHeader не равен нулю.
Я предлагаю добавить целоекуча assert() s, чтобы проверить, что данные, которые вы используете, действительно действительны, когда вы пытаетесь работать с ними.

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