我已经计算了视频的当前帧和背景帧的h,s和v值的差异,并且想要显示该值以便对差值进行随机检查以进行进一步的操作。我得到360x640矩阵的最终输出。猜猜它显示最后一帧的差值。任何人都可以帮我显示h,s和v的所有差值。
videoObject = VideoReader(movieFullFileName)
% Determine how many frames there are.
% numberOfFrames = videoObject.NumberOfFrames;
vidHeight = videoObject.Height;
vidWidth = videoObject.Width;
for frame = 1 : numberOfFrames
% Extract the frame from the movie structure.
thisFrame = read(videoObject, frame);
% Now let's do the differencing
alpha = 0.5;
if frame == 1
Background = thisFrame;
else
% Change background slightly at each frame
% Background(t+1)=(1-alpha)*I+alpha*Background
Background = (1-alpha)* thisFrame + alpha * Background;
end
% Display the changing/adapting background.
subplot(2, 2, 3);
imshow(Background);
title('Adaptive Background', 'FontSize', fontSize);
% Do color conversion from rgb to hsv
x=rgb2hsv(thisFrame);
y=rgb2hsv(Background);
% Split the hsv component to h,s,v value
Hx = x(:,:,1);
Sx = x(:,:,2);
Vx = x(:,:,3);
Hy = y(:,:,1);
Sy = y(:,:,2);
Vy = y(:,:,3);
dh=(abs(double(Hx) - double(Hy)));
ds1=(abs(double(Sx) - double(Sy)));
dv1=(abs(double(Vx) - double(Vy)));
disp(dh);
disp(ds1);
disp(dv1);
end
end
答案 0 :(得分:0)
您应该在drawnow
- 循环的末尾添加for
以更新每一帧的数字窗口。
此外,disp
会向您显示差异矩阵作为数字。考虑使用像
subplot(2, 2, 1)
imshow(dh)
使用适当的颜色缩放来显示差异矩阵。
答案 1 :(得分:0)
如果您想要显示完整的图片
首先,您需要评估完整的HSV图像
hsv=zeros(size(x,1),size(x,2))
hsv(:,:,1) = dh;
hsv(:,:,2) = ds1;
hsv(:,:,3) = dv1;
然后使用:
转换为RGBrgb = hsv2rgb(hsv);
然后您可以使用以下方式显示它:
image(rgb);
如果您想要显示单个h,s和v图像
只需使用:
for frame = 1 : numberOfFrames
subplot(3,1,1)
imshow(dh)
subplot(3,1,2)
imshow(ds1)
subplot(3,1,3)
imshow(ds2)
impixelinfo;
pause;
end
当光标位于图像上方时,您将在图像的左下角看到像素值。 要继续下一个图像,请按任意键盘键