閾值分割是一種圖像分割方法,一般用於生成二值圖像。閾值分爲簡單閾值和自適應閾值兩種。
Simple Thresholding
在簡單的閾值操作中,值大於指定閾值的像素被分配一個標準值。
您可以使用Imgproc類的threshold()方法對圖像執行簡單的閾值操作,以下是此方法的語法。
threshold(src, dst, thresh, maxval, type)
此方法接受以下參數&負;
src−類的對象表示源(輸入)圖像。
dst−類的對象表示目標(輸出)圖像。
thresh−表示閾值的雙精度變量。
maxval−一個雙精度變量,表示像素值大於閾值時要給定的值。
類型−一個整數類型的變量,表示要使用的閾值類型。
Example
下面的程序演示如何在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。
Output
在執行程序時,您將得到以下輸出&負;
Image Processed
如果您打開指定的路徑,您可以按以下方式觀察輸出圖像−
Other types of simple thresholding
除了前面示例中演示的THRESH_BINARY操作之外,OpenCV還提供了各種其他類型的閾值操作。所有這些類型都由Imgproc類的預定義靜態欄位(固定值)表示。
通過將其各自的預定義值傳遞給threshold()方法中名爲type的參數,可以選擇所需的閾值操作的類型。
Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_BINARY);
下面是表示各種類型的閾值操作及其各自輸出的值。