由於這是一款電腦遊戲,我認爲酒吧的顏色應該是不變的。這隻有在動態光照影響健康條時纔可能是真實的,這是不太可能的。
因此,只需找到所有具有這種特定顏色的像素。然後你做一些形態學操作並將圖像分割成斑點。通過只選擇符合某些標準的斑點,您可以找到單位的位置。
我知道我的答案不涉及視頻,但操作應該非常簡單,應該很快。
至於跟蹤,只需找到每個點在下一幀最接近。
由於HUD的位置是恆定的,所以移除它應該沒有問題。
這裏是在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
而且結果:
添加一個簡單的卡爾曼濾波器,以幫助跟蹤單位幀與幀和你設置。 – 2012-03-02 08:57:19
Wow nice job!你的代碼正是我需要的:--D – zergylord 2012-03-03 06:15:32