OpenCV - 自適應閾值



在**簡單閾值化**中,閾值是全域性的,即影像中所有畫素的閾值相同。**自適應閾值化**是一種針對較小區域計算閾值的方法,因此不同區域將具有不同的閾值。

在 OpenCV 中,可以使用 `Imgproc` 類的 `adaptiveThreshold()` 方法對影像執行自適應閾值操作。以下是此方法的語法。

adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

此方法接受以下引數:

  • **src** - `Mat` 類物件,表示源(輸入)影像。

  • **dst** - `Mat` 類物件,表示目標(輸出)影像。

  • **maxValue** - 雙精度型變數,表示如果畫素值大於閾值則要賦予的值。

  • **adaptiveMethod** - 整型變數,表示要使用的自適應方法。這將是以下兩個值之一:

    • **ADAPTIVE_THRESH_MEAN_C** - 閾值是鄰域區域的均值。

    • **ADAPTIVE_THRESH_GAUSSIAN_C** - 閾值是鄰域值的加權和,權重為高斯視窗。

  • **thresholdType** - 整型變數,表示要使用的閾值型別。

  • **blockSize** - 整型變數,表示用於計算閾值的畫素鄰域的大小。

  • **C** - 雙精度型變數,表示兩種方法中使用的常數(從均值或加權均值中減去)。

示例

以下程式演示如何在 OpenCV 中對影像執行自適應閾值操作。這裡我們選擇型別為**二值化**的`adaptiveThreshold`以及`ADAPTIVE_THRESH_MEAN_C`作為閾值方法。

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class AdaptiveThresh {
   public static void main(String args[]) throws Exception {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap14/thresh_input.jpg";
      
      // Reading the image
      Mat src = Imgcodecs.imread(file,0);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C,
         Imgproc.THRESH_BINARY, 11, 12);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap14/Adaptivemean_thresh_binary.jpg", dst);

      System.out.println("Image Processed");
   } 
}

假設上面程式中指定的是輸入影像 `thresh_input.jpg`。

Thresh Input

輸出

執行程式後,您將獲得以下輸出:

Image Processed

如果您開啟指定的路徑,您可以觀察到輸出影像如下:

Adaptive Threshold Output

其他型別的自適應閾值化

除了前面示例中演示的 `ADAPTIVE_THRESH_MEAN_C` 作為自適應方法和 `THRESH_BINARY` 作為閾值型別之外,我們還可以選擇這兩種值的更多組合。

Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C, 
   Imgproc.THRESH_BINARY, 11, 12);

以下是表示 `adaptiveMethod` 和 `thresholdType` 引數各種值組合及其各自輸出的值。

adaptiveMethod / thresholdType ADAPTIVE_THRESH_MEAN_C ADAPTIVE_THRESH_GAUSSIAN_C
THRESH_BINARY ADAPTIVE_THRESH_BINARY ADAPTIVE_THRESH_GAUSSIAN_BINARY
THRESH_BINARY_INV ADAPTIVE_THRESH_BINARY_INV ADAPTIVE_THRESH_GAUSSIAN_BINARY_INV
廣告
© . All rights reserved.