2016-06-23 4 views
0

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

mov = VideoReader('movie.avi'); 

parfor i=1:5 

    vd(i)=read(mov,[(i-1)*5+1, (i)*5]); 
    current_frame=0; 
    while hasFrame(vd(i)) 
     current_frame=current_frame+1;    
     vidFrame = readFrame(vd(i)); 
     fprintf('%d part, frame no %d\n',i,current_frame); 
    end 
end 

Я продолжаю получать эту ошибку в первой строке внутри парфорной петли.

индексируется размером назначения несовпадение

Как получить то, что приходит от чтения функции в переменный кадре vd?

ответ

1

Вы пытаетесь сохранить что-то that is not a scalar (read(mov, [start, stop])) в то, что является скаляр (vd(i)). Вероятно, вы хотите сделать массив ячеек так, чтобы каждый элемент мог содержать что-то произвольного размера/размера.

vd{k} = read(mov, [(k-1)*5+1, (k)*5]); 
+0

Спасибо! Я знал, в чем проблема, но я продолжал пытаться добавить двоеточие в качестве первых трех измерений для размещения значений rgb. В любом случае, это разрешило это, но теперь я столкнулся со следующей проблемой: - Ошибка UndefinedFunction была брошена на рабочих для 'hasFrame'. Это может быть связано с тем, что файл , содержащий «hasFrame», недоступен для рабочих. Используйте addAttachedFiles (пул, файлы), чтобы указать нужный файл . См. Документацию для «parallel.Pool/addAttachedFiles» для получения дополнительной информации о . Любая идея об этом или я должен задать новый вопрос для этого? –

+1

@ChintanTrivedi Выход 'read' не является объектом« VideoReader »и поэтому не имеет метода' hasFrame'. Вы просто захотите определить, как выглядит вывод * * и перебирать его. – Suever

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