Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Ngưỡng thích ứng (Adaptive Threshold) trong OpenCV Java

Ngưỡng thích ứng tính giá trị ngưỡng cho các vùng nhỏ, do đó các vùng khác nhau có ngưỡng khác nhau.

Phương thức adaptiveThreshold() thực hiện ngưỡng thích ứng. Tham số:

  • Hai Mat: ảnh nguồn, đích.
  • Int: giá trị ngưỡng tối đa.
  • Hai int: phương pháp thích ứng (ADAPTIVE_THRESH_MEAN_C hoặc GAUSSIAN_C) và loại ngưỡng (THRESH_BINARY).
  • Int: kích thước lân cận pixel (block size).
  • Double: hằng số trừ đi từ trung bình/trọng số.

Ví dụ minh họa

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class AdaptiveThreshold extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String file = "D:\\Images\\win2.jpg";
        Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_GRAYSCALE);
        
        Mat dst = new Mat(src.rows(), src.cols(), src.type());
        
        // Adaptive Threshold: MEAN_C, BINARY, blockSize=11, C=12
        Imgproc.adaptiveThreshold(src, dst, 125,
            Imgproc.ADAPTIVE_THRESH_MEAN_C,
            Imgproc.THRESH_BINARY, 11, 12);
        
        Image img = HighGui.toBufferedImage(dst);
        WritableImage writableImage = SwingFXUtils.toFXImage((BufferedImage) img, null);
        
        ImageView imageView = new ImageView(writableImage);
        imageView.setX(10);
        imageView.setY(10);
        imageView.setFitWidth(575);
        imageView.setPreserveRatio(true);
        
        Group root = new Group(imageView);
        Scene scene = new Scene(root, 595, 400);
        stage.setTitle("Adaptive Threshold");
        stage.setScene(scene);
        stage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

Hình ảnh đầu vào và kết quả

Input: Ngưỡng thích ứng (Adaptive Threshold) trong OpenCV Java

Output: Ngưỡng thích ứng (Adaptive Threshold) trong OpenCV Java