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**。

Thresh Input

输出

执行程序后,您将获得以下输出:

Image Processed

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

Thresh Output

其他类型的简单阈值化

除了前面示例中演示的 **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_TRUNC THRESH_TRUNC
THRESH_TOZERO THRESH_TOZERO
THRESH_TOZERO_INV THRESH_TOZERO_INV
广告