Storm 0 Жалоба Опубликовано November 14, 2010 Здравствуйте. В процессе изучения OpenCV попробовал запустить программу, которая читает один файл и пишет в другой. Её код: #include "stdafx.h" #include "highgui.h" #include "cv.h" int main(int argc, char** argv[]) { CvCapture* capture = cvCreateFileCapture("f.avi"); if( !capture ) { return -1; } IplImage* bgr_frame = cvQueryFrame( capture ); double fps = cvGetCaptureProperty( capture, CV_CAP_PROP_FPS); CvSize size = cvSize((int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT)); CvVideoWriter* writer = cvCreateVideoWriter("1.avi", CV_FOURCC('M','J','P','G'), fps, size); IplImage* logpolar_frame = cvCreateImage( size, IPL_DEPTH_8U, 3); while( (bgr_frame=cvQueryFrame(capture)) != NULL ) { cvLogPolar( bgr_frame, logpolar_frame, cvPoint2D32f(bgr_frame->width/2, bgr_frame->height/2), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); cvWriteFrame( writer, logpolar_frame ); } cvReleaseVideoWriter( &writer ); cvReleaseImage( &logpolar_frame ); cvReleaseCapture( &capture ); return(0); } Компилируется без ошибок. Но на стадии выполнения на инструкции cvWriteFrame( writer, logpolar_frame ) появляется исключение Unhandled exception at 0x01217ef5 in CVHW.exe: 0xC0000005: Access violation reading location 0xffffffff. Как по-вашему в чем может быть дело? Кодеки в системе установлены, сомневаюсь, что причина в них, т.к. пример с простым выводом видео в окно работает нормально. Вызов cvLogPolar тоже исключал, cvWriteFrame( writer, bgr_frame ) в этом случае приводит точно к тому же исключению. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 14, 2010 Посмотрите чему равны Size и fps. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Storm 0 Жалоба Опубликовано November 15, 2010 Да, действительно, fps и size были равны 0. Но программу из первого поста мне так и не удалось заставить работать Однако работает немного другая: // // Программа получает видео с камеры и записывает в avi файл // #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "stdio.h" int main(int argc, char* argv[]) { cvNamedWindow("capture"); // получаем любую подключённую камеру CvCapture *capture = cvCreateCameraCapture(CV_CAP_ANY); assert(capture!=0); const char *filename = "capture.avi"; // частота кадров double fps = 10; // размер картинки CvSize size = cvSize(640, 480); CvVideoWriter *writer = cvCreateVideoWriter(filename, CV_FOURCC('X','V','I','D'), fps, size, 1); assert(writer!=0); IplImage *frame = 0; //int abc = 1; //bool er2 = true; //char ame3 = 'c'; //IplImage *frame1 = 0; bool flag = true; while(flag) { // получаем кадр frame = cvQueryFrame( capture ); cvFlip(frame,frame,0); // сохраняем в файл cvWriteFrame(writer, frame); char c = cvWaitKey(33); switch (c) { case 27: // если нажата ESC - выходим flag = false; break; default: break; } // показываем cvShowImage("capture", frame); } // освобождаем ресурсы cvReleaseCapture( &capture ); cvReleaseVideoWriter(&writer); cvDestroyWindow("capture"); return 0; } Не могу понять: почему если раскомментировать любую из строк //int abc = 1; //bool er2 = true; //char ame3 = 'c'; //IplImage *frame1 = 0; программа начинает падать. Причем если закомментировать cvWriteFrame(writer, frame); исключения уже не появляются. Как объявление переменных, которые нигде потом и не используются, может приводить к таким последствиям? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах