Этот код является примером набора инструментов Computer Vision System Toolbox, который генерирует векторы движения оптического потока. Любопытно, как извлечь из каждого видеокадра массив [x, y] с координатными точками, из которых состоят эти векторы.
videoReader=vision.VideoFileReader('videoname','ImageColorSpace','Intensity',...
'VideoOutputDataType','uint8');
converter = vision.ImageDataTypeConverter;
opticalFlow = vision.OpticalFlow('ReferenceFrameDelay', 1);
opticalFlow.OutputValue = 'Horizontal and vertical components in complex form';
shapeInserter = vision.ShapeInserter('Shape', 'Lines', 'BorderColor',...
'Custom','CustomBorderColor', 255);
VideoPlayer = vision.VideoPlayer('Name','Motion Vector');
videoInfo = info(videoReader);
videoPlayer = vision.VideoPlayer('Position',...
[100 100 videoInfo.VideoSize(1:2)+30]);
while ~isDone(videoReader)
frame = step(videoReader);
im = step(converter, frame);
of = step(opticalFlow, im);
lines = videooptflowlines(of, 20);
if ~isempty(lines)
out = step(shapeInserter, im, lines);
step(videoPlayer, out);
end
end
release(videoPlayer);
release(videoReader);
Итак, погуглил строки videooptflowlines = function(f, 20); генерирует координаты точек линий оптического потока. Я попытался поместить «строки» в командное окно, ожидая, пока я верну массив с этими данными, но, видимо, это был не ожидаемый массив. В отличие от этой матрицы?