Syntax error How to find Image Contours using Java OpenCV library?

How to find Image Contours using Java OpenCV library?



Contours are nothing but the line joining all the points along the boundary of a particular shape. Using this you can −

  • Find the shape of an object.

  • Calculate the area of an object.

  • Detect an object.

  • Recognize an object.

You can find the contours of various shapes, objects in an image using the findContours() method. This method accepts the following parameters −

  • A binary image.

  • An empty list object of type MatOfPoint to store the contours.

  • An empty Mat object to store the image topology.

  • Two integer variables to specify the mode and method to find the contours of the given image.

Example

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class FindingContours {
   public static void main(String args[]) throws Exception {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      String file ="D:\Images\shapes.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);
      Iterator<MatOfPoint> it = contours.iterator();
      while(it.hasNext()) {
         System.out.println(it.next());
      }
      /*
      Mat draw = Mat.zeros(binary.size(), CvType.CV_8UC3);
      for (int i = 0; i < contours.size(); i++) {
         System.out.println(contours);
         Scalar color = new Scalar(0, 0, 255);
         //Drawing Contours
         Imgproc.drawContours(draw, contours, i, color, 2, Imgproc.LINE_8, hierarchey, 2, new Point() ) ;
      }
      HighGui.imshow("Contours operation", draw);
      HighGui.waitKey();
      */
   }
}

Output

Mat [ 29*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19829510,
dataAddr=0x19826dc0 ]
Mat [ 58*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19829580,
dataAddr=0x19826f00 ]
Mat [ 35*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19828be0,
dataAddr=0x19827100 ]
Mat [ 117*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19829190,
dataAddr=0x19827280 ]
Mat [ 1*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x198292e0,
dataAddr=0xba8280 ]
Mat [ 78*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19829350,
dataAddr=0x19827680 ]
Mat [ 63*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x198289b0,
dataAddr=0x19827940 ]
Mat [ 120*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19828e80,
dataAddr=0x19827b80 ]
Mat [ 4*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19829430,
dataAddr=0xb84580 ]
Mat [ 4*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19829120,
dataAddr=0xb84440 ]
Mat [ 136*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19828ef0,
dataAddr=0x19827f80 ]
Mat [ 120*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x19828b00,
dataAddr=0x19828440 ]
Updated on: 2020-04-10T08:52:28+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements