Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Java to C++

Can someone convert this Java method to C++, I tried but can't figure it out.

private Mat rectifyCard(Mat image, MatOfPoint contour) {
        MatOfPoint2f card2f = new MatOfPoint2f(contour.toArray());
        double peri = Imgproc.arcLength(card2f, true);
        MatOfPoint2f approx = new MatOfPoint2f();
        Imgproc.approxPolyDP(card2f,approx, 0.02*peri, true);
        log("=========================");
        Point tmp = approx.toList().get(0);
        boolean shouldRotate = false;
        int i = 0;
        for(Point p : approx.toList()) {
            if(tmp.x + tmp.y > p.x + p.y) {
                shouldRotate = true;
                break;
            }
            i ++;
        }
        if (shouldRotate) {
            log("shouldRotate");
            List<Point> list = approx.toList();
            Point[] points = {list.get(1), list.get(2), list.get(3), list.get(0)};
            approx.fromArray(points);
        }


        Mat transform = getPerspectiveTransformation(loadPoints(approx.toArray()));
        Mat result = new Mat(CARD_WIDTH, CARD_HEIGHT, CvType.CV_8UC1);
        Imgproc.warpPerspective(image, result, transform, new Size(CARD_WIDTH, CARD_HEIGHT));

//        Highgui.imwrite(EDIT_PATH, result);
//        displayPhoto(EDIT_PATH);
        return result;
    }

Thanks