我在這裏有兩個方法似乎給出了創建二進制圖像的相同結果,但是我不確定它們是否以任何方式不同或者當一個用於另一個?有什麼想法嗎?謝謝。用於創建二進制圖像的圖像閾值處理的不同方法
retval, sxbinary = cv2.threshold(abssx, 20, 100, cv2.THRESH_BINARY)
sxbinary = np.zeros_like(abssx)
sxbinary[(abssx >= 20) & (abssx <= 100)] = 1
我在這裏有兩個方法似乎給出了創建二進制圖像的相同結果,但是我不確定它們是否以任何方式不同或者當一個用於另一個?有什麼想法嗎?謝謝。用於創建二進制圖像的圖像閾值處理的不同方法
retval, sxbinary = cv2.threshold(abssx, 20, 100, cv2.THRESH_BINARY)
sxbinary = np.zeros_like(abssx)
sxbinary[(abssx >= 20) & (abssx <= 100)] = 1
這是我的問題的正確答案:
問題與cv2.threshold()
實際上沒有采取一個較低的上限閾值,只是一個較低的閾值和「最大」值,將被分配給所有上面的像素門檻較低。
如果看看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()
方法
我不想理解cv2.threshold,而是我上面提到的兩種方法之間的差異會產生相同的結果。 – kevbuntu
您需要查看文檔。但是很有可能cv2.threshold和THRESH_BINARY是一個相對愚蠢的函數,它只是將所有像素設置在一定範圍內。 –
我不是想了解cv2.threshold,而是我上面提到的兩種方法之間的差異會產生相同的結果。 – kevbuntu