OpenCV 2.2 Windows 7
У меня есть метод C ++ (ниже), который создает файл avi из массива фреймов (IplImage *).Имя файла основывается на том, какой из двух потоков (назовем их «левый» и «правый») выполняет запись.
Код:
void AvtCameraCapture::save_as_video(IplImage **frames,const char * fname, int num_frames, int playback_fps,CvSize &size)
{
//EnterCriticalSection(&cs);
CvVideoWriter *writer = cvCreateVideoWriter(fname,CV_FOURCC('D', 'I', 'B', ' '),playback_fps,size);
printf("Writer is %x\n", writer);
for (int i=0; i < num_frames; i++)
{
printf("Wrote frame %d to file %s\n",i,fname);
cvWriteFrame(writer,frames[i]);
}
cvReleaseVideoWriter(&writer);
//LeaveCriticalSection(&cs);
}
Файл создан дляпервый поток, который выполняет метод.Но файл для второго потока не создается.
Я вижу отпечатки для обоих потоков с правильными именами файлов для каждого.Обратите внимание, что CvVideoWriter * не равен нулю.
writing to file c:\flyball_passes\Left_dog_2.avi
Writer is 4dabf60
Wrote frame 0 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 1 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 2 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 3 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 4 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 5 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 6 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 7 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 8 to file c:\flyball_passes\Left_dog_2.avi
writing to file c:\flyball_passes\Right_dog_2.avi
Writer is 4d2a930
Wrote frame 0 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 1 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 2 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 3 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 4 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 5 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 6 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 7 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 8 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 9 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 10 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 11 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 12 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 13 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 14 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 15 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 16 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 17 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 18 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 19 to file c:\flyball_passes\Right_dog_2.avi
video written to file c:\flyball_passes\Right_dog_2.avi
Masking for 2.696000 seconds in lane Right.
Wrote frame 9 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 10 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 11 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 12 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 13 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 14 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 15 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 16 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 17 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 18 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 19 to file c:\flyball_passes\Left_dog_2.avi
video written to file c:\flyball_passes\Left_dog_2.avi
Если я раскомментирую критические разделы ввода / выхода, один поток завершает запись до запуска другого, но все равно не создается файл для потока, который достигнет последнего:
writing to file c:\flyball_passes\Left_dog_2.avi
Writer is 4f5d298
Wrote frame 0 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 1 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 2 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 3 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 4 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 5 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 6 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 7 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 8 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 9 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 10 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 11 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 12 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 13 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 14 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 15 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 16 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 17 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 18 to file c:\flyball_passes\Left_dog_2.avi
Wrote frame 19 to file c:\flyball_passes\Left_dog_2.avi
video written to file c:\flyball_passes\Left_dog_2.avi
Masking for 2.570000 seconds in lane Left.
writing to file c:\flyball_passes\Right_dog_2.avi
Writer is 4f5d298
Wrote frame 0 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 1 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 2 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 3 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 4 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 5 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 6 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 7 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 8 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 9 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 10 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 11 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 12 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 13 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 14 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 15 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 16 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 17 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 18 to file c:\flyball_passes\Right_dog_2.avi
Wrote frame 19 to file c:\flyball_passes\Right_dog_2.avi
video written to file c:\flyball_passes\Right_dog_2.avi
Даже если я подожду несколько секунд, чтобы запустить событие, которое инициирует запись второго файла, оно никогда не появится.
Если я запускаю только события, которые инициируют запись файла для правой полосы (без предварительного вызова cvCreateVideoWriter
на левой полосе), я вижу файл avi для правой полосы.
Любое понимание будет с благодарностью!
Спасибо,
Дейв Томас