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.
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(); } }
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!