2016-12-18 12 views
-1

我在這裏有兩個方法似乎給出了創建二進制圖像的相同結果,但是我不確定它們是否以任何方式不同或者當一個用於另一個?有什麼想法嗎?謝謝。用於創建二進制圖像的圖像閾值處理的不同方法

retval, sxbinary = cv2.threshold(abssx, 20, 100, cv2.THRESH_BINARY) 

sxbinary = np.zeros_like(abssx) 
sxbinary[(abssx >= 20) & (abssx <= 100)] = 1  
+0

您需要查看文檔。但是很有可能cv2.threshold和THRESH_BINARY是一個相對愚蠢的函數,它只是將所有像素設置在一定範圍內。 –

+0

我不是想了解cv2.threshold,而是我上面提到的兩種方法之間的差異會產生相同的結果。 – kevbuntu

回答

0

這是我的問題的正確答案:

問題與cv2.threshold()實際上沒有采取一個較低的上限閾值,只是一個較低的閾值和「最大」值,將被分配給所有上面的像素門檻較低。

1

如果看看cv2.threshold()方法的documentation則可能會發現PARAMS被定義爲:

​​

SRC - 輸入陣列(單信道,8位或32位浮點)。

dst - 與src具有相同大小和類型的輸出數組。

閾值 - 閾值。

maxval - 與THRESH_BINARY和THRESH_BINARY_INV閾值類型一起使用的最大值。

類型 - 閾值類型

所以你通過與100作爲價值第三參數是actally的強度值,以用於在上面給定閾值20像素,寫入相同的numpy的格式看起來會像:

sxbinary[(abssx >= 20)] = 100 

但是,如果你想在細分給定範圍內的像素,那麼你需要看看cv2.inRange()方法

+0

我不想理解cv2.threshold,而是我上面提到的兩種方法之間的差異會產生相同的結果。 – kevbuntu