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

Biến đổi khoảng cách (Distance Transform) trong OpenCV Java

Biến đổi khoảng cách là biểu diễn dẫn xuất của ảnh số. Cường độ xám của các điểm trong vùng tiền cảnh được thay bằng khoảng cách đến giá trị 0 gần nhất (ranh giới).

Phương thức distanceTransform() của Imgproc áp dụng biến đổi này. Tham số:

  • Hai Mat: ảnh nguồn, đích.
  • Int: loại biến đổi (DIST_L1, DIST_L2, DIST_C).
  • Int: kích thước mask (3, 5, hoặc PRECISE).

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 DistanceTransform extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        
        String file = "D://images//boy.jpg";
        Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_GRAYSCALE);
        
        Mat dst = new Mat();
        Mat binary = new Mat();
        
        // Chuyển sang ảnh nhị phân
        Imgproc.threshold(src, binary, 100, 255, Imgproc.THRESH_BINARY);
        
        // Distance Transform
        Imgproc.distanceTransform(binary, dst, Imgproc.DIST_C, 3);
        Core.convertScaleAbs(dst, dst);
        
        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("Distance Transform");
        stage.setScene(scene);
        stage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

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

Input: Biến đổi khoảng cách (Distance Transform) trong OpenCV Java

Output: Biến đổi khoảng cách (Distance Transform) trong OpenCV Java