1

I wrote the below code to draw lines to link the corners of the object image, what I want to do is to draw lines to link the corners of the scene image.

the object is placed on the left side, and the scene is on the right side, and since I have the points of the corners of the object, I think I need just to add the points of the object corners so that:

top left sceneCorner : objCorners.cols
top right sceneCorner: objCorners.cols * 2
bottom right sceneCorner: objCorners.rows * 2
bottom left scenecorner: objCorners.rows

now i do not know how to add these coordinates to draw lines link the scene corners?

code:

    Mat objCorners = new Mat(4, 1, CvType.CV_32FC2);
    Mat sceneCorners = new Mat(4, 1, CvType.CV_32FC2);

    objCorners.put(0, 0, new double[] {0, 0});//top left
    objCorners.put(1, 0, new double[] {matFactory.getMatAt(0).cols(), 0});//top right
    objCorners.put(2, 0, new double[] {matFactory.getMatAt(0).cols(), matFactory.getMatAt(0).rows()});//bottom right
    objCorners.put(3, 0, new double[] {0, matFactory.getMatAt(0).rows()});//bottom left.

    sceneCorners.put(0, 0, new double[] {0, 0});//top left
    sceneCorners.put(1, 0, new double[] {matFactory.getMatAt(1).cols(), 0});//top right
    sceneCorners.put(2, 0, new double[] {matFactory.getMatAt(1).cols(), matFactory.getMatAt(1).rows()});//bottom right
    sceneCorners.put(3, 0, new double[] {0, matFactory.getMatAt(1).rows()});//bottom left.

    Log.D(TAG, "", "sceneCorners.size: " + sceneCorners.dump());
    Log.D(TAG, "", "objCorners.size: " + objCorners.dump());

    Core.perspectiveTransform(objCorners, sceneCorners, H);// the values inside sceneCorners matrix changes after this line as it is what this function returns. 

    Log.D(TAG, "", "sceneCorners.size: " + sceneCorners.dump());
    Log.D(TAG, "", "objCorners.size: " + objCorners.dump());

    //the below 4 lines are to draw line links between the objCorners.
    Core.line(outImg, new Point(objCorners.get(0, 0)), new Point(objCorners.get(1, 0)), new Scalar(0, 0, 255), 4);
    Core.line(outImg, new Point(objCorners.get(1, 0)), new Point(objCorners.get(2, 0)), new Scalar(0, 0, 255), 4);
    Core.line(outImg, new Point(objCorners.get(2, 0)), new Point(objCorners.get(3, 0)), new Scalar(0, 0, 255), 4);
    Core.line(outImg, new Point(objCorners.get(3, 0)), new Point(objCorners.get(0, 0)), new Scalar(0, 0, 255), 4);

    MatFactory.writeMat(FilePathUtils.newOutputPath("corners"), outImg);
4

0 回答 0