java - 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);
}
解决方案
推荐阅读
- javascript - JS/TS:二维字符串数组突然变得未定义时出错
- ios - 如何从 pc(windows/linux) 安装 ios 应用程序
- mongodb - MongoDB查询以查找其字段值包含在给定字符串中的文档
- sql - Oracle regexp_substr 提取数据
- c - 在C中打印数组的唯一值
- html - 将 div 的高度设置为 100% 不会填满容器 div 的整个高度
- elasticsearch - 为每个过滤后的 elasticsearch 文档运行子查询
- python - 在 Google Colab 中显示动画
- c - 迭代一个长整数,然后将数字附加到 C 中的数组
- apache - 如何将一些 url 直接指向一个 www 文件夹,而将其他 url 传递给 apache2