【问题标题】:OpenCV warpPerspective and findHomography created output on both sides of image frameOpenCV warpPerspective 和 findHomography 在图像帧的两侧创建了输出
【发布时间】:2020-11-07 12:52:08
【问题描述】:

我一直试图弄清楚如何通过使用单应性然后扭曲图像来获得场景的鸟瞰图。我试图扭曲的图像在下面链接,选择的点周围有蓝色圆圈。我从类似的帖子中看到了我需要确保正确排序点的建议,并且我尝试了对象点的不同排序,但结果仍然有相同的奇怪错误。

图像点是手动选择的,您可以根据需要在输出中看到地砖接近正方形。

我认为问题出在单应矩阵上,因为当单应矩阵应用于图像的角落时,它们最终会出现在输出中的像素位置。由于所有角点都在图像中,this post 中描述的计算图像角点以获得完整结果的标准方法没有帮助。

任何帮助将不胜感激!输入图像为:

输出图像是:

用于生成此代码的代码如下。

import cv2
import numpy as np

img = cv2.imread('test4_frame.png')
img_circled = img.copy()
im_pts = np.array([[659, 618], [779, 662], [542, 654], [661, 707]], np.float32)

for pt in im_pts:
  cv2.circle(img_circled, (pt[0], pt[1]), 10, 255)

cv2_imshow(img_circled)
obj_pts = np.array([[1500, 1500], [1550, 1500], [1500, 1550], [1550, 1550]], np.float32)
H = cv2.findHomography(im_pts, obj_pts)[0]
out = cv2.warpPerspective(img, H, (4000, 4000))
cv2_imshow(out)

【问题讨论】:

  • 好像吃豆子效果,把目标点移到左下角:obj_pts = np.array([[3500, 3500], [3550, 3500], [3500, 3550], [3550, 3550]], np.float32)

标签: python numpy opencv computer-vision homography


【解决方案1】:

又过了几个小时解决这个问题,我注意到问题是我感兴趣的飞机永远不会到达图像中消失点上方的点。因此,消失点上方的点具有未定义的行为,因为它无法投影到平面上,这就是问题的原因。

我通过粗略估计消失点并将图像裁剪到下方一点来解决这个问题,同时相应地调整图像点,其结果是here。

van_point_est = 250
img = img[van_point_est:, :]
for i in range(len(im_pts)):
  im_pts[i, 1] -= van_point_est

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2014-10-30
    • 2020-01-19
    • 2017-06-28
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多