Example usage for org.opencv.imgproc Subdiv2D getTriangleList

List of usage examples for org.opencv.imgproc Subdiv2D getTriangleList

Introduction

In this page you can find the example usage for org.opencv.imgproc Subdiv2D getTriangleList.

Prototype

public void getTriangleList(MatOfFloat6 triangleList) 

Source Link

Usage

From source file:de.hu_berlin.informatik.spws2014.ImagePositionLocator.TriangleImagePositionLocator.java

License:Open Source License

/**
 * Builds ProjectionTriangles from triangulated markers.
 * Requires OpenCV!/*w  ww.j ava  2  s .c  o  m*/
 */
public void newMarkerAdded(List<Marker> markers) {
    if (markers.size() < 2)
        return;

    if (markers.size() == 2) {
        //Guess third marker
        projs = new ArrayList<ProjectionTriangle>();
        projs.add(new ProjectionTriangle(markers.get(0), markers.get(1)));
    } else {
        Subdiv2D subdiv = new Subdiv2D();
        subdiv.initDelaunay(new Rect(0, 0, imageSize.x, imageSize.y));

        for (Marker m : markers)
            System.out.println("-> " + m.realpoint.longitude + " / " + m.realpoint.latitude);
        for (Marker m : markers)
            subdiv.insert(new Point(m.imgpoint.x, m.imgpoint.y));

        MatOfFloat6 mafloat = new MatOfFloat6();
        subdiv.getTriangleList(mafloat);
        float[] tmparray = mafloat.toArray();

        ArrayList<ProjectionTriangle> tmplist = new ArrayList<ProjectionTriangle>();
        for (int i = 0; i < tmparray.length; i += 6) {
            Marker m1 = findMarkerByPoint(markers, tmparray[i], tmparray[i + 1]);
            Marker m2 = findMarkerByPoint(markers, tmparray[i + 2], tmparray[i + 3]);
            Marker m3 = findMarkerByPoint(markers, tmparray[i + 4], tmparray[i + 5]);

            if (m1 != null && m2 != null && m3 != null)
                tmplist.add(new ProjectionTriangle(m1, m2, m3, settings.getMaxDissimilarityPercent(),
                        settings.getBadTriWeightPenalty(), settings.getMinTriAngleSize()));
        }

        for (ProjectionTriangle mainPt : tmplist) {
            for (ProjectionTriangle subPt : tmplist) {
                if (mainPt != subPt)
                    mainPt.tryAddToProjGroup(subPt);
            }
        }

        projs = tmplist;
    }
}