Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Adaptive Threshold ใน OpenCV พร้อมตัวอย่าง Java

Thresholding เป็นเทคนิคง่ายสำหรับ segmentation ภาพ ใช้สร้างภาพ binary โดยพิกเซลที่มีค่ามากกว่า threshold จะถูกแทนที่ด้วยค่ามาตรฐาน

Adaptive thresholding เป็นวิธีที่คำนวณ threshold สำหรับพื้นที่เล็กๆ ทำให้แต่ละพื้นที่มีค่า threshold ต่างกัน

เมธอด adaptiveThreshold() ทำ Adaptive Threshold operation บนภาพที่กำหนด พารามิเตอร์มีดังนี้:

  • สองอ็อบเจ็กต์ Mat แทน source และ destination images
  • ตัวแปร integer แทนค่า threshold
  • สองตัวแปร integer แทน adaptive method และ threshold type ที่ใช้
  • ตัวแปร integer แทนขนาดของ pixel neighborhood ที่ใช้คำนวณ threshold
  • ตัวแปร double แทนค่าคงที่ที่ใช้ในทั้งสองวิธี

ตัวอย่างโค้ด

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 {
        // โหลด OpenCV core library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String file = "D:\\Images\\win2.jpg";
        Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_GRAYSCALE);
        
        // สร้าง matrix ว่างสำหรับ destination image
        Mat dst = new Mat(src.rows(), src.cols(), src.type());
        
        // ใช้ adaptive threshold
        Imgproc.adaptiveThreshold(src, dst, 125,
            Imgproc.ADAPTIVE_THRESH_MEAN_C,
            Imgproc.THRESH_BINARY, 11, 12);
        
        // แปลง matrix เป็น JavaFX writable image
        Image img = HighGui.toBufferedImage(dst);
        WritableImage writableImage = SwingFXUtils.toFXImage((BufferedImage) img, null);
        
        // ตั้งค่า ImageView
        ImageView imageView = new ImageView(writableImage);
        imageView.setX(10);
        imageView.setY(10);
        imageView.setFitWidth(575);
        imageView.setPreserveRatio(true);
        
        // ตั้งค่า Scene
        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);
    }
}

รูปภาพ Input

Adaptive Threshold ใน OpenCV พร้อมตัวอย่าง Java

ผลลัพธ์

เมื่อรันโปรแกรมจะได้หน้าต่างดังนี้:

Adaptive Threshold ใน OpenCV พร้อมตัวอย่าง Java