我有一个男人的视频 walking.I 需要把这个男人放在中间,保持他的动作完好无损。即似乎在走路但停留在同一个地方
I have a video of a man walking.I need to bring this man in middle keeping his motion intact. i.e. appears to be walking but stays at same place
这是一帧:
它是黑白剪影形式。 (Man-White,Rest-Black)。这个人从第一帧走到最后一帧,从右到左。我希望他始终处于中心位置,但他应该看起来在移动。以至于他就像在跑步机上行走一样。
我做了裁剪部分。我不知道如何将质心固定在一个点上,这样这个人就不会出现振动。这是到目前为止的代码
clc;
close all;
clear all;
video_read = VideoReader('D:\PROJECT M.Tech\Databases\Videos\DATA SET B[=11=]9\bg-0100.avi');
numframes = video_read.NumberOfFrames;
for j= 1:numframes
frame=read(video_read,j);
im=rgb2gray(frame);
im = bwareaopen(im,50);
siz=size(im); % image dimensions
% Label the disconnected foreground regions (using 8 conned neighbourhood)
L=bwlabel(im,8);
% Get the bounding box around each object
bb=regionprops(L,'BoundingBox');
% Crop the individual objects and store them in a cell
n=max(L(:)); % number of objects
ObjCell=cell(n,1);
for i=1:n
% Get the bb of the i-th object and offest by 2 pixels in all
% directions
bb_i=ceil(bb(i).BoundingBox);
idx_x=[bb_i(1)-2 bb_i(1)+bb_i(3)+2];
idx_y=[bb_i(2)-2 bb_i(2)+bb_i(4)+2];
if idx_x(1)<1, idx_x(1)=1; end
if idx_y(1)<1, idx_y(1)=1; end
if idx_x(2)>siz(2), idx_x(2)=siz(2); end
if idx_y(2)>siz(1), idx_y(2)=siz(1); end
% Crop the object and write to ObjCell
im=L==i;
ObjCell{i}=im(idx_y(1):idx_y(2),idx_x(1):idx_x(2));
end
% Visualize the individual objects
figure
for i=1:n
subplot(1,n,i)
imshow(ObjCell{i})
end
%bbox=regionprops(frame_im,'BoundingBox')
F(j)=getframe;
end
非常天真的答案是
for number_of_frame
[m,n] = find(frame);
imshow(min(m):max(m),min(n):max(n)));
drawnow;
end
这对于大图像或大量帧来说会非常慢。
我明白了。使用边界框并使图像简单地居中。
这是一帧:
它是黑白剪影形式。 (Man-White,Rest-Black)。这个人从第一帧走到最后一帧,从右到左。我希望他始终处于中心位置,但他应该看起来在移动。以至于他就像在跑步机上行走一样。
我做了裁剪部分。我不知道如何将质心固定在一个点上,这样这个人就不会出现振动。这是到目前为止的代码
clc;
close all;
clear all;
video_read = VideoReader('D:\PROJECT M.Tech\Databases\Videos\DATA SET B[=11=]9\bg-0100.avi');
numframes = video_read.NumberOfFrames;
for j= 1:numframes
frame=read(video_read,j);
im=rgb2gray(frame);
im = bwareaopen(im,50);
siz=size(im); % image dimensions
% Label the disconnected foreground regions (using 8 conned neighbourhood)
L=bwlabel(im,8);
% Get the bounding box around each object
bb=regionprops(L,'BoundingBox');
% Crop the individual objects and store them in a cell
n=max(L(:)); % number of objects
ObjCell=cell(n,1);
for i=1:n
% Get the bb of the i-th object and offest by 2 pixels in all
% directions
bb_i=ceil(bb(i).BoundingBox);
idx_x=[bb_i(1)-2 bb_i(1)+bb_i(3)+2];
idx_y=[bb_i(2)-2 bb_i(2)+bb_i(4)+2];
if idx_x(1)<1, idx_x(1)=1; end
if idx_y(1)<1, idx_y(1)=1; end
if idx_x(2)>siz(2), idx_x(2)=siz(2); end
if idx_y(2)>siz(1), idx_y(2)=siz(1); end
% Crop the object and write to ObjCell
im=L==i;
ObjCell{i}=im(idx_y(1):idx_y(2),idx_x(1):idx_x(2));
end
% Visualize the individual objects
figure
for i=1:n
subplot(1,n,i)
imshow(ObjCell{i})
end
%bbox=regionprops(frame_im,'BoundingBox')
F(j)=getframe;
end
非常天真的答案是
for number_of_frame
[m,n] = find(frame);
imshow(min(m):max(m),min(n):max(n)));
drawnow;
end
这对于大图像或大量帧来说会非常慢。
我明白了。使用边界框并使图像简单地居中。