OpenCV - 简单阈值


阈值处理是一种图像分割方法,通常用于创建二值图像。阈值处理有两种类型,即简单阈值处理和自适应阈值处理。

简单阈值处理

在简单的阈值操作中,值大于指定阈值的像素被分配有标准值。

您可以使用Imgproc类threshold()方法对图像进行简单的阈值操作,以下是该方法的语法。

threshold(src, dst, thresh, maxval, type)

该方法接受以下参数 -

  • src - Mat类的对象,表示源(输入)图像。

  • dst - Mat类的对象,表示目标(输出)图像。

  • thresh - 表示阈值的双精度型变量。

  • maxval - 双精度型变量,表示像素值大于阈值时要给出的值。

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

例子

以下程序演示了如何在 OpenCV 中对图像执行简单的阈值操作。

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

public class Thresh {
   public static void main(String args[]) {
      // 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";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();
      Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_BINARY);

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

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

假设以下是上述程序中指定的输入图像thresh_input.jpg 。

阈值输入

输出

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

Image Processed

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

阈值输出

其他类型的简单阈值处理

除了前面示例中演示的THRESH_BINARY操作之外,OpenCV 还提供各种其他类型的阈值操作。所有这些类型都由Imgproc类的预定义静态字段(固定值)表示。

您可以通过将其各自的预定义值传递给threshold()方法的名为type的参数来选择所需的阈值操作的类型。

Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_BINARY);

以下是代表各种类型阈值操作及其各自输出的值。

操作及说明 输出
THRESH_BINARY THRESH_BINARY
THRESH_BINARY_INV THRESH_BINARY_INV
阈值截断 阈值截断
THRESH_TOZERO THRESH_TOZERO
THRESH_TOZERO_INV THRESH_TOZERO_INV