2013-07-24 24 views
0

我有一點點本地化問題:機器人檢測選定區域的變化

我有一個Swing應用程序,我可以添加兩點。該應用程序的功能是每隔100ms將屏幕上兩點確定的選定區域(矩形)保存起來,並將其與前一版本進行比較,以查看該區域是否有任何更改。

所以此操作完全這個每100ms:

  1. 獲取區域
  2. 創建位圖
  3. 與以前的版本(99%)比較

這樣做的一點是,我需要如果所選區域改變,則要執行的操作。所選區域的90%時間保持不變。

有沒有一種更有效的方法在java/swing中添加某種偵聽器來檢查指定區域的變化?我試圖尋找類似的東西,但對於這類問題,搜索詞過於籠統。 (或者我只是愚蠢的。)

有幾百萬的罐子在那裏我希望有可能有類似的東西,適合我的需要。

+0

兩點只給出一條線。該區域的其他維度如何確定? – blackSmith

+1

基本上你希望在背景發生變化時產生一箇中斷。對...??如果我沒有得到錯誤呢? –

+1

@blackSmith:你可以使用兩個相鄰點做一個矩形。 –

回答

1

如圖所示here,createScreenCapture()可以捕獲由您的兩點定義的直立矩形中的像素的BufferedImage。您可以使用getRGB()來遍歷像素以實現任何所需的啓發式。您選擇的方法detect a scene change取決於目標。作爲一個簡單的具體示例,您可以使用getHSBColor()查找亮度變化。更多的例子可以在ImageJ中找到。

1

如果通過'改變'你的意思是'屏幕顯示的重大變化',那麼我認爲這種方法是最好的方法。任何其他的「屏幕更改監聽器」可能都必須實現相同的功能。

PS:也許你可以通過測試一些像素來改變效率,例如提高效率。隨機選取10個像素中的1個,並只比較這些像素。