如何使用 Python OpenCV 對影像進行自適應均值和高斯閾值處理?


自適應閾值是一種閾值處理技術。還有其他型別的閾值處理技術,例如使用全域性閾值值的簡單閾值處理。但是,對於在不同區域具有不同光照條件的影像,使用全域性閾值值並不是一個好主意。

自適應閾值計算影像中一小區域的閾值。因此,影像中不同區域具有不同的閾值,與簡單的閾值處理技術相比,這可以提供更好的結果。

有三個特殊的引數:adaptive_method、block_sizeconst。請參閱下面給出的語法。

語法

cv2.adaptiveThreshold(img, max_val, adaptive_method, thresh_type, block_size, const)

引數

  • img − 輸入灰度影像。它是一個 numpy.ndarray。

  • max_valu − 要分配給畫素的最大值。

  • adaptive_method − 它決定如何計算閾值。有兩種不同的自適應閾值方法 -

    • cv2.ADAPTIVE_THRESH_MEAN_C − 在此方法中,閾值是鄰域區域的平均值。

    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C − 在此方法中,閾值是鄰域值的加權和,其中權重是高斯視窗。

  • thresh_type − 要應用的閾值型別。

  • block_size − 決定鄰域區域的大小。

  • const − 從計算出的平均值或加權平均值中減去的常數。

輸出 - 它返回閾值

讓我們藉助幾個 Python 示例來了解自適應均值閾值和自適應高斯閾值。

輸入影像

我們將在以下示例中使用此影像作為輸入檔案。

示例 1:自適應均值閾值

在此程式中,我們使用cv2.ADAPTIVE_THRESH_MEAN_C 作為自適應方法對輸入影像應用自適應閾值。我們使用block_size=11const=2。我們使用二進位制閾值作為thresh_type

import cv2 # Read the input RGB image as a Gray Scale image img = cv2.imread('floor.jpg',0) # apply median blur img = cv2.medianBlur(img,5) # apply adaptive mean thresholding th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2) # display the output image cv2.imshow("Adaptive Mean Thresholding", th) cv2.waitKey(0) cv2.destroyAllWindows()

輸出

執行以上程式後,將生成以下輸出視窗 -

以上輸出顯示了應用自適應均值閾值後的影像。

示例 2:自適應高斯閾值

在此程式中,我們使用cv2.ADAPTIVE_THRESH_GAUSSIAN_C 作為自適應方法對輸入影像應用自適應閾值。

我們使用block_size=11const=2。我們使用二進位制閾值作為thresh_type

import cv2 # Read the input RGB image as a Gray Scale image img = cv2.imread('floor.jpg',0) # apply median blur img = cv2.medianBlur(img,5) # apply adaptive mean thresholding th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2) # display the output image cv2.imshow("Adaptive Gaussian Thresholding", th) cv2.waitKey(0) cv2.destroyAllWindows()

輸出

執行以上程式後,將生成以下輸出。

以上輸出顯示了應用自適應高斯閾值後的影像。

更新於: 2022年9月27日

2K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.