簡體   English   中英

如何在OpenCV中執行圖像閾值處理和規范化?

[英]How to perform image thresholding and normalization in OpenCV?

我有一個16位圖像,我想轉換為8位圖像。 但是我想在此之前做一些過濾。 低於某個值(例如P1)的所有值都應為0.並且高於不同值(例如P2)的所有值應變為255.這些值之間的所有值都應根據它們與P1和P2的距離進行縮放。

以下代碼執行此操作:

def transform(value):
    if value < P1:
        value = 0
    elif value > P2:
        value = 255
    else:
        value = (value - P1) * (255.0 / (P2 - P1))
    return value

然后使用原始的16位圖像作為輸入:

newImage= [[transform(value) for value in row] for row in originalImage]

然而,這是非常慢的...我試圖使用cv2.convertScaleAbs做同樣的cv2.convertScaleAbs ,這很快,但並不完全做我想要的。 特別是這個功能中的'Abs'部分讓我無法使用。

我可以使用不同的功能以更快的方式獲得我想要的東西嗎?

我找到了一個使用cv2.convertScaleAbs的解決方案

首先將原始圖像縮放為int32:

originalImage = numpy.array(originalImage, dtype=np.int32)

然后減去P1值,使所有小於P1的值為負:

newImage = np.array(originalImage - P1)

然后將負值剪輯為0:

newImage = newImage.clip(min=0)

最后使用帶有正確alpha的convertScaleAbs

alpha = 255.0 / (P2 - P1)
newImage= cv2.convertScaleAbs(newImage, alpha=alpha)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM