我从我的视频拍摄了两帧。其中一个是背景,下一个是我应用背景减法的帧。第三个图像是背景减法后的结果。这里我只得到了这个人的衬衫而不是整个身体。
backgorund减法代码
v = VideoReader('test.mp4');
n = get(v,'NumberOfFrames');
back = read(v,30);
y = read(v,150);
imshow([y;back;y-back]);
答案 0 :(得分:0)
由于白色可能具有更高的价值(在每个频道中可能?我不知道你的数据格式是怎样的)。你得到负值然后我猜是被裁剪为0(黑色)。当你从中减去红色时,看看你的衬衫是如何变绿的。(背景板)。
您必须通过检查更改内容来屏蔽背景,然后删除所有未更改的内容。
可能像
diff =y-back
if ( element of diff unequal 0) then set element to 1
noback = diff .* y
我写的一个小例子:
back = rand(4)
y = back
y(5) = 0.6 %put something in front of the background
y(7) = 0.7 %put something in front of the background
mask = zeros(4)
mask(find(y-back)) = 1 %set values that are different in y to 1
noback = mask.*y %elementwise multiplication to mask out the background
您可能必须使用除了掩码之外的其他内容,因为图像不会100%相同,但这应该显示一般方法。