Maison  >  Article  >  Java  >  Comment insérer une ellipse dans une image pour entourer des objets possibles à l'aide d'OpenCV Java ?

Comment insérer une ellipse dans une image pour entourer des objets possibles à l'aide d'OpenCV Java ?

WBOY
WBOYavant
2023-08-28 14:37:05628parcourir

Vous pouvez ajuster la forme d'une ellipse en utilisant la méthode fitEllipse() de la classe org.opencv.imgproc.Imgproc. Cette méthode accepte un objet de classe MatOfPoint2f, calcule une ellipse qui correspond à l'ensemble de points donné et renvoie un objet RotatedRect.

En utilisant cette méthode, vous pouvez dessiner des ellipses autour d'objets possibles dans l'image. Pour ce faire,

  • lisez l'image en utilisant la méthode imread() de la classe Imgproc.

  • Convertissez-la en une image en niveaux de gris à l'aide de la méthode cvtColor() de la classe Imgproc.

  • Convertissez une image en niveaux de gris en image binaire à l'aide de la méthode threshold() de la classe Imgproc.

  • Utilisez la méthode findContours() de la classe Imgproc pour trouver les contours dans l'image.

  • Maintenant, transmettez chaque valeur de contour en tant que MatOfPoint2f à la méthode fitEllipse() pour obtenir un objet RotatedRec des contours possibles.

  • Enfin, utilisez la méthode ellipse() pour dessiner une ellipse autour de la forme possible.

Remarque − Pour ajuster une ellipse, l'objet doit contenir au moins cinq points.

Exemple

import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.MatOfPoint2f;
import org.opencv.core.RotatedRect;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class FitEllipseExample {
   public static void main(String args[]) throws Exception {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      //Reading the contents of the image
      String file ="D:\Images\javafx_graphical.jpg";
      Mat src = Imgcodecs.imread(file);
      //Converting the source image to binary
      Mat gray = new Mat(src.rows(), src.cols(), src.type());
      Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
      Mat binary = new Mat(src.rows(), src.cols(), src.type(), new Scalar(0));
      Imgproc.threshold(gray, binary, 100, 255, Imgproc.THRESH_BINARY_INV);
      //Finding Contours
      List<MatOfPoint> contours = new ArrayList<>();
      Mat hierarchey = new Mat();
      Imgproc.findContours(binary, contours, hierarchey, Imgproc.RETR_TREE,
      Imgproc.CHAIN_APPROX_SIMPLE);
      //Empty rectangle
      RotatedRect[] rec = new RotatedRect[contours.size()];
      for (int i = 0; i < contours.size(); i++) {
         rec[i] = new RotatedRect();
         if (contours.get(i).rows() > 5) {
            rec[i] = Imgproc.fitEllipse(new MatOfPoint2f(contours.get(i).toArray()));
         }
         Scalar color_elli = new Scalar(190, 0, 0);
         Imgproc.ellipse(src, rec[i], color_elli, 5);
      }
      HighGui.imshow("Contours operation", src);
      HighGui.waitKey();
   }
}

Image d'entrée

如何使用OpenCV Java在图像中适应椭圆来围绕可能的对象?

Sortie

如何使用OpenCV 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