Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenCV drawContours in Java

I'm trying to draw contours around object in image but i get error OpenCV Error: Unsupported format or combination of formats ([Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only) in cvStartFindContours, file C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\contours.cpp, line 198

I tried to convert image but error is still there how to use DrawContour?

 Mat imageInMat = Imgcodecs.imread("C:/Users/ja/workspace/imgtomath/bin/imgtomath/lena.png");
         if(imageInMat.empty()== true)
             {System.out.println("Error no image found!!");}

         imageInMat.convertTo(imageInMat, CvType.CV_32SC1);

         List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
            Mat hierarchy = new Mat();
            Imgproc.findContours(imageInMat, contours, hierarchy, Imgproc.RETR_FLOODFILL, Imgproc.CHAIN_APPROX_SIMPLE);

        Imgproc.drawContours(imageInMat, contours, -1, new Scalar(255,0,0));
like image 692
Brunts Avatar asked May 23 '15 12:05

Brunts


People also ask

What is contour in Java?

Contours is 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.

How do you contour with OpenCV?

To draw the contours, cv. drawContours function is used. It can also be used to draw any shape provided you have its boundary points. Its first argument is source image, second argument is the contours which should be passed as a Python list, third argument is index of contours (useful when drawing individual contour.

What is cv2 findContours?

We see that there are three essential arguments in cv2. findContours() function. First one is source image, second is contour retrieval mode, third is contour approximation method and it outputs the image, contours, and hierarchy. 'contours' is a Python list of all the contours in the image.

How does OpenCV detect contour?

Use the findContours() function to detect the contours in the image. Draw Contours on the Original RGB Image.


1 Answers

It should work properly:

Mat image = Imgcodecs.imread("C:/Users/ja/workspace/imgtomath/bin/imgtomath/lena.png");
if(image.empty() == true) {
    System.out.println("Error: no image found!");
}

List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat image32S = new Mat();
image.convertTo(image32S, CvType.CV_32SC1);

Imgproc.findContours(image32S, contours, new Mat(), Imgproc.RETR_FLOODFILL, Imgproc.CHAIN_APPROX_SIMPLE);

// Draw all the contours such that they are filled in.
Mat contourImg = new Mat(image32S.size(), image32S.type());
for (int i = 0; i < contours.size(); i++) {
    Imgproc.drawContours(contourImg, contours, i, new Scalar(255, 255, 255), -1);
}

Highgui.imwrite("debug_image.jpg", contourImg); // DEBUG
like image 91
Kornel Avatar answered Nov 14 '22 22:11

Kornel