2015-07-01 4 views
-1

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

obj = VideoReader('DemoClip.asf'); 
imageData = read(obj); 
imageData(17,32,:) = 65; 
+0

Тег [: обработка] метка должна использоваться только для вопросов о языке обработки. –

ответ

0

Это способ сделать это, используя videoWriter. Код прокомментирован; если что-то неясно спросите. Я использовал файл demo xylophone.mp4 из Mathworks.

clear 
clc 
close all 

xyloObj = VideoReader('xylophone.mp4'); 

imageData = read(xyloObj); 

%// Open writer object 
writerObj = VideoWriter('NewVideo.avi'); 
open(writerObj); 

%// Show 1st frame 
hIm = imshow(imageData(:,:,:,1)); 
for k = 1:size(imageData,4) 

    %// Change pixel values 
    imageData(1:200,1:200,:,k) = uint8(0); 

    %// Refresh cdata property. Faster than calling repetitevely imshow 
    set(hIm,'CData',imageData(:,:,:,k)); 

    drawnow 
    frame = getframe; 
    %// Write to video file 
    writeVideo(writerObj,frame); 

end 

close(writerObj); 

Пример кадра полученного видео:

enter image description here

+0

Большое вам спасибо! У меня есть еще один вопрос. Я заметил, что VideoWriter позволяет создавать файл .avi. Можно ли превратить его в другой тип? Например, .asf? – Juan

+0

VideoWriter позволяет записывать Motion JPEG AVI, несжатые AVI, Motion JPEG 2000 и MPEG-4/H.264. Подробнее см. В документе VideoWriter. –

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