首页 > 解决方案 > OpenCV BirdEyeView:如何正确设置透视变换的点?

问题描述

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

谢谢!

如果有帮助,我也有来自相机矩阵的数据:[1204.8790283203125,0.0,956.2759399414062,0.0,1204.8790283203125,347.5567626953125,0.0,0.0,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);
    }

![在此处输入图像描述

在此处输入图像描述

标签: javaopencvmathperspectivecamera

解决方案


推荐阅读