由于这是一款电脑游戏,我认为酒吧的颜色应该是不变的。这只有在动态光照影响健康条时才可能是真实的,这是不太可能的。
因此,只需找到所有具有这种特定颜色的像素。然后你做一些形态学操作并将图像分割成斑点。通过只选择符合某些标准的斑点,您可以找到单位的位置。
我知道我的答案不涉及视频,但操作应该非常简单,应该很快。
至于跟踪,只需找到每个点在下一帧最接近。
由于HUD的位置是恒定的,所以移除它应该没有问题。![Image without HUD](https://i.stack.imgur.com/WB9HT.jpg)
这里是在Matlab我的快速,不那么强大的实现,有一些限制:
- 单位,必须是相当健康的(至少40个像素宽)
- 条不重叠。
function FindUnits()
x = double(imread('c:\1.jpg'));
green = cat(3,149,194,151);
diff = abs(x - repmat(green,[size(x,1) size(x,2)]));
diff = mean(diff,3);
diff = logical(diff < 30);
diff = imopen(diff,strel('square',1));
rp = regionprops(diff,'Centroid','MajorAxisLength','MinorAxisLength','Orientation');
long = [rp.MajorAxisLength]./[rp.MinorAxisLength];
rp(long < 20) = [];
xy = [rp.Centroid];
x = xy(1:2:end);
y = xy(2:2:end);
figure;imshow('c:\1.jpg');hold on ;scatter(x,y,'g');
end
而且结果:
![enter image description here](https://i.stack.imgur.com/x6TQ4.jpg)
添加一个简单的卡尔曼滤波器,以帮助跟踪单位帧与帧和你设置。 – 2012-03-02 08:57:19
Wow nice job!你的代码正是我需要的:--D – zergylord 2012-03-03 06:15:32