使用OpenCV findHomography生成变换矩阵精度不足问题排查
求解图像中桌子到实际桌子的单应变换矩阵精度问题
我已获取图像帧中桌子四个角的坐标及该桌子的实际尺寸,想要求解从图像中桌子(第一张图)到实际桌子(第二张图)的变换矩阵T,实现将原始帧中的点(如球的弹跳位置)映射到第二张图的矩形区域中。
我尝试使用OpenCV的findHomography计算变换矩阵,但得到的结果精度完全达不到要求。我需要的是T = A -> B,其中:
A:原始图像中桌子的角点坐标
[[512.10633894 269.22351997] # 底部角点 [325.78198672 236.36953072] # 左侧角点 [536.67952727 199.18259532] # 顶部角点 [715.21023044 214.80199122]] # 右侧角点
B:目标实际坐标
[[152.5 0. ] [ 0. 0. ] [ 0. 274. ] [152.5 274. ]]
计算得到的变换矩阵T
[[-5.96154850e-01 -3.38096031e+00 9.92931129e+02] [-5.59829402e-01 3.17495425e+00 -5.68494643e+02] [-2.76038296e-04 -8.61104226e-03 1.00000000e+00]]
使用该T矩阵变换A点后,得到的结果B'完全不符合预期:
[[[-221 0 -1]] [[ 0 0 -1]] [[ 0 -235 0]] [[-159 -285 -1]]]
结果量级勉强接近,但精度极差,且所有值均为负数,我完全无法理解原因。为什么B'不等于B?
相关代码如下:
T, status = cv.findHomography(img_corners, TABLE_COORDS, cv.RANSAC, 5.) T_img = cv.transform(img_corners.reshape((-1, 1, 2)), T)
我尝试将RANSAC的阈值参数从5.0调小,但没有任何效果...
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

