Computer >> Máy Tính >  >> Lập trình >> Java

Triển khai Java của OpenCV Hough Circle Transform.

Bạn có thể phát hiện các vòng tròn trong một hình ảnh nhất định bằng cách sử dụng biến đổi hình tròn Hough. Bạn có thể áp dụng biến đổi Hough Circle bằng cách sử dụng HoughCircles () , phương thức này chấp nhận các tham số sau -

  • Một đối tượng Mat đại diện cho hình ảnh đầu vào.

  • Một đối tượng Mat để lưu trữ các vectơ đầu ra của các vòng tròn được tìm thấy.

  • Biến số nguyên đại diện cho phương pháp phát hiện.

  • Hai biến số kép đại diện cho tỷ lệ nghịch của độ phân giải bộ tích lũy với độ phân giải hình ảnh và khoảng cách tối thiểu giữa các tâm của các vòng tròn được phát hiện.

Ví dụ

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
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;
public class HoughCircleTransform extends Application {
   public void start(Stage stage) throws IOException {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      String file ="D:\\Images\\compass.jpg";
      Mat src = Imgcodecs.imread(file);
      //Converting the image to Gray
      Mat gray = new Mat();
      Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGBA2GRAY);
      //Blurring the image
      Mat blur = new Mat();
      Imgproc.medianBlur(gray, blur, 5);
      //Detecting the Hough Circles
      Mat circles = new Mat();
      Imgproc.HoughCircles(blur, circles, Imgproc.HOUGH_GRADIENT, Math.PI/180, 150);
      for (int i = 0; i < circles.cols(); i++ ) {
         double[] data = circles.get(0, i);
         Point center = new Point(Math.round(data[0]), Math.round(data[1]));
         // circle center
         Imgproc.circle(src, center, 1, new Scalar(0, 0, 255), 3, 8, 0 );
         // circle outline
         int radius = (int) Math.round(data[2]);
         Imgproc.circle(src, center, radius, new Scalar(0,0,255), 3, 8, 0 );
      }
      //Converting matrix to JavaFX writable image
      Image img = HighGui.toBufferedImage(src);
      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("Hough Circle Transform");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]) {
      launch(args);
   }
}

Hình ảnh đầu vào

Triển khai Java của OpenCV Hough Circle Transform.

Đầu ra

Khi thực thi, phần trên tạo ra kết quả sau -

Triển khai Java của OpenCV Hough Circle Transform.