Проблема сохранения AVI-файла в python 2.6 с использованием OpenCV 2.1 - PullRequest
1 голос
/ 03 марта 2011

Я программист-любитель, который много лет занимается программированием.У меня мало формального обучения;поэтому, пожалуйста, простите неэффективность в коде, включенном ниже.

Я работал над алгоритмом отслеживания движения в Python 2.6 с использованием OpenCV 2.1.Я все работаю на ноутбуке Dell под управлением Windows XP SP2.У меня необычная ситуация.Несколько месяцев назад у меня было несколько кодов ввода и вывода AVI.Я не помню, чтобы что-то менялось на моем компьютере тем временем (хотя это не должно быть правдой).Теперь я получаю сообщение об ошибке, когда код пытается освободить конструкцию Video Writer.

Приведенный ниже код используется для создания фильма с движущимися кругами разных размеров.Я использовал эти фильмы, чтобы проверить мой код отслеживания движения.Когда я запускаю его сейчас, он не может сохранить фильм в конце файла.Вот код.

 Created on Apr 30, 2010

 @author: Josh
 '''
 #!/usr/bin/env python

 from opencv.cv import *  
 from opencv.highgui import *  

 if __name__ == '__main__':
     width = 640
     height = 480
     cvNamedWindow("Test Image", CV_WINDOW_AUTOSIZE);
     movie = cvCreateVideoWriter('C:\\Documents and Settings\\Josh\\Desktop\\Microcirc    working\\South.avi', CV_FOURCC('d','i','v','x'),24, cvSize(width,height),0)
     frame = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
     for m in range(0,5):
         n = m
         l = m
         for i in range(0,height):
             for j in range(0,width):
     #            i = int(array)
     #            j = int(element)
                 cvSet2D(frame, i, j, 255)

         xcenter = width/2
         ycenter = height/2
         print n
         cvCircle(frame, cvPoint(xcenter+l,ycenter+n), 10, 0, -1)
         cvCircle(frame, cvPoint(xcenter+l,ycenter+n-60), 10, 0, -1)
         cvCircle(frame, cvPoint(xcenter+l,ycenter+n+60), 10, 0, -1)
         cvCircle(frame, cvPoint(xcenter+l+60,ycenter+n), 20, 0, -1)
         cvCircle(frame, cvPoint(xcenter-l+60,ycenter-n-60), 20, 0, -1)
         cvCircle(frame, cvPoint(xcenter+l+60,ycenter+n+60), 20, 0, -1)
         cvCircle(frame, cvPoint(xcenter+l-60,ycenter+n), 3, 0, -1)
         cvCircle(frame, cvPoint(xcenter+l-60,ycenter+n-60), 3, 0, -1)        
         cvCircle(frame, cvPoint(xcenter+l-60,ycenter+n+60), 3, 0, -1)

         cvShowImage("Test Image", frame)

         char = cvWaitKey(3)
         cvWriteFrame(movie, frame)

     print 'out of for loop'
     cvReleaseVideoWriter(movie)
     print 'writer released'

Когда я запускаю код, я получаю следующий ответ от компьютера.

 0
 1
 2
 3
 4

 Output #0, avi, to 'C:\Documents and Settings\Josh\Desktop\Microcirc working\South.avi':
     Stream #0.0: Video: mpeg4, yuv420p, 640x480, q=2-31, 19660 kb/s, 90k tbn, 24 tbc

Это полный код ошибки.Целые числа перед рукой - это счетная распечатка из программы (print n).

Я просмотрел онлайн несколько форумов и нашел этот код ошибки как часть более длинных сообщений об ошибках.Если я заменяю кодек AVI на тот, который не установлен на моем компьютере, я получаю более длинное сообщение об ошибке, в котором говорится, что кодек отсутствует.

Я уверен, что есть простой ответ, но я усталудариться головой о стену.Все комментарии приветствуются.

Спасибо, Джош

...