📜  OpenCV-自适应阈值

📅  最后修改于: 2020-11-23 03:45:55             🧑  作者: Mango


简单阈值化中,阈值是全局的,即对于图像中的所有像素都相同。自适应阈值化是针对较小区域计算阈值的方法,因此对于不同区域将有不同的阈值。

在OpenCV中,您可以使用Imgproc类的adaptiveThreshold()方法对图像执行自适应阈值操作。以下是此方法的语法。

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

此方法接受以下参数-

  • srcMat类的一个对象,代表源(输入)图像。

  • dstMat类的一个对象,代表目标(输出)图像。

  • maxValue-双重类型的变量,表示像素值大于阈值时要给出的值。

  • adaptiveMethod-一个整数变量,其类型表示要使用的自适应方法。这将是以下两个值之一

    • ADAPTIVE_THRESH_MEAN_C-阈值是邻域的平均值。

    • ADAPTIVE_THRESH_GAUSSIAN_C-阈值是邻域值的加权和,其中权重是高斯窗口。

  • thresholdType-整数类型的变量,表示要使用的阈值类型。

  • blockSize-整数类型的变量,表示用于计算阈值的像素邻域的大小。

  • C-双重类型的变量,表示两种方法中使用的常数(减去平均值或加权平均值)。

  • 以下程序演示了如何在OpenCV中对图像执行自适应阈值操作。在这里,我们选择二进制类型的自适应阈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

    阈值输入

    输出

    在执行程序时,您将获得以下输出-

    Image Processed
    

    如果打开指定的路径,则可以观察到输出图像,如下所示:

    自适应阈值输出

    其他类型的自适应阈值

    除了如上例所示的自适应方法ADAPTIVE_THRESH_MEAN_C和阈值类型THRESH_BINARY外,我们还可以选择这两个值的更多组合。

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

    以下是代表参数AdaptableMethodthresholdType及其各自输出的值的各种组合的值。

    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