chAmi chAmi - 2 months ago 48
Java Question

How to convert MatOfPoint to MatOfPoint2f in opencv java api

I'm trying to implement the example code of the following
by using opencv java api. To implement

findContours(gray, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
in java i used this syntax
Imgproc.findContours(gray, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

So now contours should be
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
rather than
vector<vector<cv::Point> > contours;

Then i need implement this
approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]), true)*0.02, true);
. In java api, Imgproc.approxPolyDP accept argument as
approxPolyDP(MatOfPoint2f curve, MatOfPoint2f approxCurve, double epsilon, boolean closed)
. How i can i convert MatOfPoint to MatOfPoint2f?

Or is there a way to use vectors as same as c++ interface to implement this. Any suggestion or sample code is greatly appreciated.


MatOfPoint2f differs from MatOfPoint only in the type of the elements (32-bit float and 32-bit int respectively). The viable option (though with a performance penalty) is to create MatOfPoint2f instance and set its elements (in a loop) to be equal to the elements of of the source MatOfPoint.

There are

 public void fromArray(Point... lp);
 public Point[] toArray();

methods in both of the classes.

So you can do just

 /// Source variable
 MatOfPoint SrcMtx;

 /// New variable
 MatOfPoint2f  NewMtx = new MatOfPoint2f( SrcMtx.toArray() );