如何添加点来绘制线条以链接场景角落

时间:2015-04-10 12:23:58

标签: java opencv javacv opencv3.0

我编写了下面的代码来绘制线条来链接对象图像的角落,我想要做的是绘制线条来链接场景图像的角落。

对象放在左侧,场景在右侧,由于我有对象角落的点,我想我只需要添加对象角点,这样:

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

现在我不知道如何添加这些坐标来绘制线条链接场景角落?

    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);

0 个答案:

没有答案