Nói chung, phép biến đổi khoảng cách là một biểu diễn bắt nguồn của một hình ảnh kỹ thuật số. Trong thao tác này, cường độ mức xám của các điểm bên trong vùng tiền cảnh được thay đổi để tạo khoảng cách tương ứng của chúng với giá trị 0 gần nhất (ranh giới).
Khoảng cáchTransform () phương thức của lớp Imgproc áp dụng Biến đổi khoảng cách trên hình ảnh đã cho, phương thức này chấp nhận -
-
Hai đối tượng Mat đại diện cho hình ảnh nguồn và hình ảnh đích.
-
Một biến số nguyên đại diện cho kiểu chuyển đổi khoảng cách sẽ được áp dụng.
-
Một giá trị số nguyên đại diện cho kích thước mặt nạ sẽ được sử dụng.
Ví dụ
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 {
public void start(Stage stage) throws IOException {
//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 ="D://images//boy.jpg";
Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_GRAYSCALE);
//Creating an empty matrix to store the results
Mat dst = new Mat();
Mat binary = new Mat();
//Converting the gray scale image to binary image
Imgproc.threshold(src, binary, 100, 255, Imgproc.THRESH_BINARY);
//Applying distance transform
Imgproc.distanceTransform(binary, dst, Imgproc.DIST_C, 3);
Core.convertScaleAbs( dst, dst );
//Converting matrix to JavaFX writable image
Image img = HighGui.toBufferedImage(dst);
WritableImage writableImage= SwingFXUtils.toFXImage((BufferedImage) img, null);
//Setting the image view
ImageView imageView = new ImageView(writableImage);
imageView.setX(10);
imageView.setY(10);
imageView.setFitWidth(575);
imageView.setPreserveRatio(true);
//Setting the Scene object
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
Đầu ra
Khi thực thi, chương trình trên tạo các cửa sổ sau -