
- Java Tutorial
- Java - Home
- Java - Overview
- Java - Environment Setup
- Java - Basic Syntax
- Java - Object & Classes
- Java - Constructors
- Java - Basic Datatypes
- Java - Variable Types
- Java - Modifier Types
- Java - Basic Operators
- Java - Loop Control
- Java - Decision Making
- Java - Numbers
- Java - Characters
- Java - Strings
- Java - Arrays
- Java - Date & Time
- Java - Regular Expressions
- Java - Methods
- Java - Files and I/O
- Java - Exceptions
- Java - Inner classes
- Java Object Oriented
- Java - Inheritance
- Java - Overriding
- Java - Polymorphism
- Java - Abstraction
- Java - Encapsulation
- Java - Interfaces
- Java - Packages
- Java Advanced
- Java - Data Structures
- Java - Collections
- Java - Generics
- Java - Serialization
- Java - Networking
- Java - Sending Email
- Java - Multithreading
- Java - Applet Basics
- Java - Documentation
- Java Useful Resources
- Java - Questions and Answers
- Java - Quick Guide
- Java - Useful Resources
- Java - Discussion
- Java - Examples
How to fit ellipses around possible objects in an image using OpenCV Java?
You can fit an ellipse over a shape using the fitEllipse() method of the org.opencv.imgproc.Imgproc class. This method accepts an object of MatOfPoint2f class, calculates the ellipse that would fit the given set of points and returns a RotatedRect object.
Using this you can draw ellipses around the possible objects in an image. To do so,
Read an image using the imread() method of the Imgproc class.
Convert it into a grayscale image using the cvtColor() method of the Imgproc class.
Convert the gray image to binary using the threshold() method of the Imgproc class.
Find the contours in the image using the findContours() method of the Imgproc class.
Now, get the RotatedRec objects for the possible contours bypassing each contour value as MatOfPoint2f to the fitEllipse() method.
Finally, draw ellipses around the possible shapes using the ellipse() method.
Note − To fit the ellipse the object should contain at least five points.
Example
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(); } }
Input Image
Output
- Related Articles
- Drawing borders around an image using OpenCV
- How to fit the ellipse to an object in an image using OpenCV Python?
- How to draw filled ellipses in OpenCV using Python?
- How to write an image using Java OpenCV library?
- How to flip an image using Java OpenCV library?
- How to rotate an image with OpenCV using Java?
- How to detect faces in an image using Java OpenCV library?
- How to add noise to an image using Java OpenCV library?
- How to add text to an image using Java OpenCV library?
- How to add borders to an image using Java OpenCV library?
- How to draw markers on an image using Java OpenCV library?
- Histogram equalization on an image in OpenCV using Java.
- How to save an Image in OpenCV using C++?
- How to rotate an image in OpenCV using C++?
- How to resize an image in OpenCV using Python?
