OpenCV BirdEyeView:如何正确设置透视变换的点?

问题描述

我尝试从街道创建一个 BirdEyeView。首先,我设置所需部分的点 (ImagePoints),然后设置要在其上投影的矩形 (objectivePoints)。 在下面的示例中,它可以工作,但是如果我更改 imagePoints,我的结果会变得很奇怪。 你能向我解释一下是什么问题并给出一个解决方案的例子吗?

谢谢!

如果有帮助的话,我还有来自相机矩阵的数据: [1204.8790283203125,0.0,956.2759399414062,1204.8790283203125,347.5567626953125,1.0]

“旋转”:{ “x”:0.0016885, “y”:0.0414801, “z”:0.0028893, “w”:0.9991337 }

“翻译”:{ “x”:2.0180001258850098, “y”:9.499490261077881E-8, “z”:1.3799999952316284 }

    imagePoints.add(new Point(10,457)); //LL
    imagePoints.add(new Point(395,291)); // UL
    imagePoints.add(new Point(624,291)); // UR
    imagePoints.add(new Point(1000,457)); //LR

    objectivePoints.add(new Point(this.roadView.width()*0.125,this.roadView.height()*0.875)); //LL
    objectivePoints.add(new Point(this.roadView.width()*0.125,this.roadView.height()*0.1));//UL
    objectivePoints.add(new Point(this.roadView.width()*0.875,this.roadView.height()*0.1)); //UR
    objectivePoints.add(new Point(this.roadView.width()*0.875,this.roadView.height()*0.875)); //LR


    public void createBirdEyeView(){
        drawInterestingPoints();
        Mat perspectiveTransform = Imgproc.getPerspectiveTransform(Converters.vector_Point2f_to_Mat(imagePoints),Converters.vector_Point2f_to_Mat(objectivePoints));
        Mat BirdEyeView = new Mat();
        Imgproc.warpPerspective(roadView,BirdEyeView,perspectiveTransform,BirdEyeView.size());
        Bird = BirdEyeView;

        Imgcodecs.imwrite("C:\\Users\\steve\\IdeaProjects\\BirdViewWithOpenCV\\resources\\output\\BirdEyeView.png",Bird);
    }

![enter image description here

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)