I’m trying to implement the example code of the following
question
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
methods in both of the classes.
So you can do just