【问题标题】:OpenCV Point UndistortionOpenCV 点不失真
【发布时间】:2017-04-12 21:19:34
【问题描述】:

我正在使用带有官方 5MP 摄像头的 Raspberry Pi 2。我已经使用 OpenCV 3.2.0 校准了相机。我正在使用 Python 3.4.2 进行编码(我知道它不是最新版本,但为更新版本重新编译 OpenCV 是不可能的)。

我的问题是,如果我在相对于相机的正方形内有一个点,并且我拥有相对于相机的正方形所有 4 个角的点(不完全是正方形,因为它可能会稍微旋转和移动) ,我如何找到相对于正方形的那个点?

例如,如果正方形的左上角是 (10, 20),并且原点稍微向右下方,可能是 (21, 33),那么最终点可能类似于(15, 18)。

将此结果基于 1 个角(并仅减去输入点和角)是不够的,因为图像可能会被缩放。基于 2 个对角(假设正方形是完全正方形且未旋转)是不够的,因为图像可能会旋转。理论上,如果我正确校准了相机(并制作了一个完美的正方形或矩形),3 应该就足够了,但是完全确定 4 更好。

问题是我不知道如何将图像上的点重新映射到正方形上的点。我该怎么做?

示例(抱歉质量低):

给定 4 个红色摄像头和输出点以及绿色摄像头点,我如何找到绿色输出点?

【问题讨论】:

    标签: python opencv camera raspberry-pi distortion


    【解决方案1】:

    刚写完(我发誓我刚刚写完),我发现了这个函数:cv2.getPerspectiveTransform()。以下是它在示例中的使用方式:

    rows = 5
    columns = 8
    inputs = [(163, 17), (294, 50), (313, 273), (145, 275)]
    outputs = [(0, 0), (5, 0), (5, 8), (0, 8)]
    
    transform_matrix = cv2.getPerspectiveTransform(inputs, outputs)
    
    def transform(point):
        global transform_matrix
        return cv2.perspectiveTransform(point, transform_matrix)
    

    【讨论】:

      猜你喜欢
      • 2021-07-19
      • 2014-03-24
      • 2022-12-01
      • 2021-09-14
      • 2017-11-22
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      相关资源
      最近更新 更多