Maison > Java > javaDidacticiel > le corps du texte

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

WBOY
Libérer: 2023-08-28 14:37:05
avant
627 Les gens l'ont consulté

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();
   }
}
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal