我正在做一个项目,我应该编写一个跟踪视频中对象的程序。该程序将用 Matlab 编写。
我遇到的问题是我无法找到一种方法来为函数 vision.MarkerInseter 提供视频中对象的位置坐标。
当我运行我的代码时,我收到一条错误消息说
Error using MarkerInserter/step
The Points input must be an M-by-2 matrix. Each row specifies a different center and is of the form [x y].
Error in Tracking_object_in_video (line 69)
tracking_on_frame = step(tracking_shape, frame, tracking_box);
当我检查 tracking_box 的尺寸时,它说这是一个 13x1 矩阵。第一个数字取决于我使用的输入视频。但它始终是 x1。
这是我到目前为止编写的代码。
请帮帮我,我真的卡住了!
fore_ground_detector = vision.ForegroundDetector('NumTrainingFrames',24,'InitialVariance',0.05);
blob_analyzer = vision.BlobAnalysis('AreaOutputPort',true,'MinimumBlobArea',20,'CentroidOutputPort',true,'ExcludeBorderBlobs',true);
%% Kod för videospelarna som ska användas att visa trackingen på.
tracking_player = vision.DeployableVideoPlayer('Location',[200 200]);
fore_ground_player = vision.DeployableVideoPlayer('Location',[600 200]);
tracking_shape = vision.MarkerInserter('Size', 18, 'Shape', 'square', 'Fill', 0.3, 'FillColor', 'White', 'Opacity', 0.5);
%% Stycke för att spela upp video samt spåra objecten.
while ~isDone(video)
frame = step(video); % Tar ut en frame i videon åt gången.
gray_frame = rgb2gray(frame); % Gör om den framen till gråskala.
masking = step(fore_ground_detector, gray_frame); % Letar rätt på områden som skiljer sig från bakgrunden.
noise_reduction = bwareaopen(masking,25); % Ignorera områden som består av mindre än X antal ihopkopplade pixlar
tracking_box = step(blob_analyzer, noise_reduction); % Bestämmer områden som är av intresse.
[~,detection] = step(blob_analyzer, noise_reduction); % Variable som visar om programmet hittar något objekt eller inte.
if ~isempty (detection) % Om detection INTE är tom.
tracking_on_frame = step(tracking_shape, frame, tracking_box); % Bestämmer var på skärmen som tracking boxen ska vara.
step(tracking_player, tracking_on_frame); % Sätter ihop tracking boxen och framen som vi har analyserat.
else % Om detection ÄR tom.
step(tracking_player,frame); % Visar bara upp framen som vi har analyserat utan tracking_box.
end
step(fore_ground_player, masking); % Spelar upp filmen som blob_analyzern ser den.
end
delete(tracking_player);
delete(fore_ground_player);