2013-07-19 34 views
1

我試圖檢測對象中的白色形狀,並且可以成功地爲1個視頻執行此操作。如何在OpenCV中使用InRange時選擇適當的標量值

// Create and display a new matrix for triangles 
triangles = src.clone(); 
GaussianBlur(triangles, triangles, Size(5, 5), 0, 0); 
inRange(triangles, Scalar(150,150,150), Scalar(255, 255, 255), triangles); 
imshow("triangles", triangles); 

這使我的結果

http://s8.postimg.org/o9xg284jp/triangles.png

然而,如果使用不同的視頻 - 然後的150中的標量值可能不如果它是一個光環境是適當的(例如。 ..一切都被檢測到)

http://s8.postimg.org/m09brgvlx/bad_triangles.png

對於這個視頻,我需要改變最小將標量T o要在190-200左右才能正常工作。我的問題 - 是否有一種確定正確標量值的好方法?我知道這聽起來對一些人來說很簡單,但是因爲這個原因我很頭疼!

回答

0

可能沒有辦法自動確定適用於所有種類視頻的閾值。但爲了減少對視頻整體閃電的依賴,您可以使其取決於圖像的平均值或中值像素值。或者,如果您知道對象在圖像中出現的大小,則可以相應地選擇閾值。

另一種方法可能是對視頻的亮度進行標準化。

但是哪種方法最好強烈依賴於您的具體情況和要求。

2

http://colorizer.org/

如果你點擊這裏,你可以看到你的問題是什麼。 RGB =(255,155,155)可能不是「白色」,但是inRange方法會給出真實的輸出。

嘗試使用HSL色彩空間。無論H和S通道值是多少,亮度> 90都是白色的。使用BGR2HLS conversion.然後在90-100之間的L通道中使用inRange。其實,對於顏色檢測問題,大多數使用的色彩空間是HSV和HSL,而不是RGB!

相關問題