2015-04-01 2 views
1

Я использую matlab для взаимодействия с научной камерой с использованием mex, и моя программа matlab использует VideoWriter() для записи файла на диск. Камера имеет RGB-совместимость, и если я пишу файл как таковой, видео в порядке. Однако для текущего приложения мне нужны изображения в оттенках серого, и поэтому я использую rgb2gray() для его преобразования. К сожалению, когда анализ кода снова попыталась прочитать видеофайл, я получаю ошибку:Matlab считает, что AVI написано поврежденным

Error using VideoReader/init (line 450) 
Unable to read the file. The file appears to be corrupt. 

и пытаюсь читать видео с VLC подтверждает, что это будет повреждено. Единственное различие в моем коде между их оттенки серого и цветовых вариантов является линия:

frame = rgb2gray(frame); 

Моя вся письменность часть кода:

vid = VideoWriter('testVid.avi'); 
vid.FrameRate = framerate; 
vid.Quality = 100; 
open(vid); 
for i = 1 : frames; 
    %read frame data into variable 'frame' 
    frame = rgb2gray(frame); 
    writeVideo(vid,frame); 
end 

Я потратил слишком долго бороться с этим, любой идеи?

ответ

2

Вам необходимо закрыть видеообъект, используя close(vid) после записи последнего кадра.

+0

Спасибо, это работает. Несмотря на то, что он работает без него, если я пишу цветное видео, а не для оттенков серого, я понятия не имею ... – srthompers

+1

При открытии видеофайла создается заголовок с некоторыми значениями по умолчанию. При закрытии этих значений заполняются. Вероятно, эти значения по умолчанию не соответствуют видео в градациях серого, поэтому он терпит неудачу. – Daniel

Смежные вопросы