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

Phát hiện cạnh Canny trong OpenCV Java

Canny edge detector là bộ phát hiện tối ưu: chỉ phát hiện cạnh thực, một phản hồi cho mỗi cạnh, tối thiểu hóa khoảng cách pixel cạnh thực và phát hiện.

Phương thức Canny() của Imgproc nhận: hai Mat (nguồn, đích), hai double (ngưỡng).

Quy trình Canny:

  1. Đọc ảnh bằng imread() của Imgcodecs.
  2. Chuyển xám bằng cvtColor() của Imgproc.
  3. Làm mờ ảnh xám bằng blur() kernel 3.
  4. Áp dụng Canny bằng Canny() của Imgproc.
  5. Tạo ma trận 0, copy cạnh vào bằng copyTo().

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.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class EdgeDetection 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);
        
        Mat gray = new Mat(src.rows(), src.cols(), src.type());
        Mat edges = new Mat(src.rows(), src.cols(), src.type());
        Mat dst = new Mat(src.rows(), src.cols(), src.type(), new Scalar(0));
        
        // Chuyển xám
        Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGB2GRAY);
        
        // Làm mờ
        Imgproc.blur(gray, edges, new Size(3, 3));
        
        // Canny
        Imgproc.Canny(edges, edges, 100, 100*3);
        
        // Copy cạnh
        src.copyTo(dst, edges);
        
        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("Canny Edge Detection");
        stage.setScene(scene);
        stage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

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

Input: Phát hiện cạnh Canny trong OpenCV Java

Output: Phát hiện cạnh Canny trong OpenCV Java