我可以从每一帧中获得积分吗?
Can I get Points from each frame?
如何获得每帧的 'points'?现在我得到最后一帧的 'points'。我想为每一帧而不是最后一帧获取 'points' x 和 y 坐标。
clear all;
clc;
videoFileReader=vision.VideoFileReader('Test.avi');
videoPlayer=vision.VideoPlayer('Position', [100, 100, 680, 520]);
objectFrame=step(videoFileReader);
objectRegion=[1121, 353, 16, 16];
objectImage=insertShape(objectFrame, 'Rectangle', objectRegion,'Color', 'red');
figure;
imshow(objectImage);
title('Yellow box shows object region');
points=detectMinEigenFeatures(rgb2gray(objectFrame), 'ROI', objectRegion);
pointImage=insertMarker(objectFrame, points.Location, '+', 'Color', 'white');
figure,
imshow(pointImage),
title('Detected interest points');
tracker=vision.PointTracker('MaxBidirectionalError', 1);
initialize(tracker, points.Location, objectFrame);
while ~isDone(videoFileReader)
frame=step(videoFileReader);
[points, validity]=step(tracker, frame);
out=insertMarker(frame, points(validity, :), '+');
step(videoPlayer, out);
end
release(videoPlayer);
release(videoFileReader);
您正在用每个新帧覆盖点。所以当所有代码完成时,只有最近的 points
被保存。 VideoFileReader
的一个问题是,在阅读所有帧之前,您无法轻易地找出有多少帧。 (我可能是错的,所以有人随时纠正我)。所以你可以创建一个 cell array。单元格可以保存各种数据、奇异值、向量、矩阵。这也很好,因为与常规数组的串联不同,每一层不必具有相同的大小。因此,假设您在 frame 1
中有 10 个点,在 frame 2
中有 3 个点,简单地进行数组连接会失败,因为它们的大小不同。另一方面,细胞并不真正关心这一点。
因此,在您的循环之前,我创建了一个空元胞数组来存储每一帧的值。然后在循环内,它递增索引并将当前 points
存储到元胞数组中。在处理结束时,每个帧都会在 hist_points
中有自己的条目希望这有助于
%initialize frame count and cell array
num_frame=1;
hist_points = {};
while ~isDone(videoFileReader)
frame=step(videoFileReader);
[points, validity]=step(tracker, frame);
%this should work no matter what dimension points is, and even if points is
%a different size each iteration
hist_points{num_frame} = points;
out=insertMarker(frame, points(validity, :), '+');
step(videoPlayer, out);
%moves to next array location
num_frame = num_frame+1
end
如何获得每帧的 'points'?现在我得到最后一帧的 'points'。我想为每一帧而不是最后一帧获取 'points' x 和 y 坐标。
clear all;
clc;
videoFileReader=vision.VideoFileReader('Test.avi');
videoPlayer=vision.VideoPlayer('Position', [100, 100, 680, 520]);
objectFrame=step(videoFileReader);
objectRegion=[1121, 353, 16, 16];
objectImage=insertShape(objectFrame, 'Rectangle', objectRegion,'Color', 'red');
figure;
imshow(objectImage);
title('Yellow box shows object region');
points=detectMinEigenFeatures(rgb2gray(objectFrame), 'ROI', objectRegion);
pointImage=insertMarker(objectFrame, points.Location, '+', 'Color', 'white');
figure,
imshow(pointImage),
title('Detected interest points');
tracker=vision.PointTracker('MaxBidirectionalError', 1);
initialize(tracker, points.Location, objectFrame);
while ~isDone(videoFileReader)
frame=step(videoFileReader);
[points, validity]=step(tracker, frame);
out=insertMarker(frame, points(validity, :), '+');
step(videoPlayer, out);
end
release(videoPlayer);
release(videoFileReader);
您正在用每个新帧覆盖点。所以当所有代码完成时,只有最近的 points
被保存。 VideoFileReader
的一个问题是,在阅读所有帧之前,您无法轻易地找出有多少帧。 (我可能是错的,所以有人随时纠正我)。所以你可以创建一个 cell array。单元格可以保存各种数据、奇异值、向量、矩阵。这也很好,因为与常规数组的串联不同,每一层不必具有相同的大小。因此,假设您在 frame 1
中有 10 个点,在 frame 2
中有 3 个点,简单地进行数组连接会失败,因为它们的大小不同。另一方面,细胞并不真正关心这一点。
因此,在您的循环之前,我创建了一个空元胞数组来存储每一帧的值。然后在循环内,它递增索引并将当前 points
存储到元胞数组中。在处理结束时,每个帧都会在 hist_points
中有自己的条目希望这有助于
%initialize frame count and cell array
num_frame=1;
hist_points = {};
while ~isDone(videoFileReader)
frame=step(videoFileReader);
[points, validity]=step(tracker, frame);
%this should work no matter what dimension points is, and even if points is
%a different size each iteration
hist_points{num_frame} = points;
out=insertMarker(frame, points(validity, :), '+');
step(videoPlayer, out);
%moves to next array location
num_frame = num_frame+1
end