我可以从每一帧中获得积分吗?

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