Maison >Java >javaDidacticiel >Transformation du cercle OpenCV Hough implémentée en Java

Transformation du cercle OpenCV Hough implémentée en Java

王林
王林avant
2023-09-10 09:21:051330parcourir

Vous pouvez détecter des cercles dans une image donnée à l'aide de Hough Circle Transform. Vous pouvez appliquer la Hough Circle Transform en utilisant la méthode HoughCircles(), qui accepte les paramètres suivants -

  • Un objet Mat représentant l'image d'entrée.
  • Objet Mat utilisé pour stocker le vecteur de sortie du cercle trouvé.

  • représente la variable entière de la méthode de détection.

  • Deux variables doubles représentant le rapport inverse de la résolution de l'accumulateur à la résolution de l'image et la distance minimale entre les centres des cercles détectés.

Exemple

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);
   }
}

Input Image

Transformation du cercle OpenCV Hough implémentée en Java

Output

Une fois exécuté, ce qui précède produira la sortie suivante -

Transformation du cercle OpenCV Hough implémentée en Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer