OpenCV Java how to access or convert List<MatOfPoint> to a list of points (x,y)

asked 2015-09-09 03:41:00 -0500

Rafalsonn gravatar image

updated 2015-09-09 04:39:37 -0500

berak gravatar image

What can I do with a List<matofpoint> to get a list for example with a coordinates of the contours?

So this is the photo I want to detect the lines from: image description

when I print the contour list it gives me a long text which i can't find out what to do with that like :

>  [Mat [ 2*1*CV_32SC2, isCont=true, isSubmat=false,nativeObj=0xd2095b0, dataAddr=0xd24d410 ],
>  Mat [ 3*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0xd209620, dataAddr=0xd1c88e0 ]

Can I use it somehow or is there any other method to take the contours from the image and have the coordinates or something like that?

So I have an image of line, already processed through the filters like grayscale, canny edge detector and I'm doing a function findContours and a draw contours:

 Imgproc.findContours(mat, aContours,aHierarchy, Imgproc.RETR_LIST,Imgproc.CHAIN_APPROX_SIMPLE);` 
 Imgproc.drawContours(mat,aContours,-1, color,CONTOUR_LINE_THICKNESS);

and I want a coordinates of a found contours from the findcontours function. Could you help me?

edit retag flag offensive close merge delete


With this function it's possible to convert the List of MatOfPoint to Vector? How to get the coordinates from Vector, or do something using Vectors?

Rafalsonn gravatar imageRafalsonn ( 2015-09-09 04:44:17 -0500 )edit

what would you want to do with it ?

berak gravatar imageberak ( 2015-09-09 04:56:43 -0500 )edit

If it's possible I want to have a found points of contours in a list which can be later used to a program to draw those lines again, but for example like that Or just extract the contour points, I think it will be enough to do that.

Rafalsonn gravatar imageRafalsonn ( 2015-09-09 05:08:09 -0500 )edit

you can convert your MatOfPoints to a List<Point> , and do whatever you want with it.

berak gravatar imageberak ( 2015-09-09 05:17:53 -0500 )edit

That would be a great solution, but I've got some weird errors when i try to convert that :

List<Point> lista = null;
Converters.Mat_to_vector_Point(aContours, lista);

The method Mat_to_vector_Point(Mat, List<point>) in the type Converters is not applicable for the arguments (List<matofpoint>, List<point>) Sorry If I make a noob mistakes, I'm a little new to OpenCV.

Rafalsonn gravatar imageRafalsonn ( 2015-09-09 05:32:05 -0500 )edit

no wait, not the List<MatofPoint> , but a single element of that

Converters.Mat_to_vector_Point(aContours.get(k), lista);
berak gravatar imageberak ( 2015-09-09 05:34:02 -0500 )edit

You are great ! It worked, Thanks so much ! That's exactly what I've needed :) I was struggling with it 2 days

Rafalsonn gravatar imageRafalsonn ( 2015-09-09 05:42:08 -0500 )edit