我正在用OpenCV
进行相机校准,并设法获得所有相机参数,但现在我不确定是否所有操作都正确。
这是我使用的图像
我在图像上使用了6个点(4个球场角落和两个在中间的网接触球场线)imgPts = [[577, 303], [1333, 303], [495, 517], [1422, 517], [366, 857], [1562, 857]]
假设左上角是原点,我构建了相应的世界坐标,单位为米(23.77m x 10.97m):
{
以下是我获取相机矩阵、旋转平移向量的代码:
objPts = np.array(objPts)
objPts = objPts.astype('float32')
imgPts = np.array(imgPts)
imgPts = imgPts.astype('float32')
w = frame.shape[1]
h = frame.shape[0]
size = (w,h)
camera_matrix = cv2.initCameraMatrix2D([objPts],[imgPts], size)
rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera([objPts], [imgPts], size, None, None)
print(rms)
2.2659039195846487
print(camera_matrix)
[[7.29904054e+04 0.00000000e+00 7.70590422e+02]
[0.00000000e+00 3.27820311e+03 1.05708724e+02]
[0.00000000e+00 0.00000000e+00 1.00000000e+00]]
print(dist_coefs)
[[-4.60113019e+00 1.52353355e+03 -1.11809613e+00 7.20674734e-02
-2.28959021e+04]]
print(rvecs[0])
[[ 0.48261931]
[-4.87671221]
[ 0.28501516]]
print(tvecs[0])
[[ -0.69935398]
[ 15.30349325]
[189.46509398]]
如何检查这些值/矩阵/向量是否正确
我从你的数字中得到奇怪的结果。坐标似乎与您共享的图片中可识别的任何东西都不匹配
我根据你分享的1366x768张照片自己做了测量。结果看起来很有道理
然而,随着稍微不同^{,我得到了截然不同的结果。这意味着您需要更多的测量来获得准确度
这张照片来自阿瑟·阿什体育场的一场比赛,该体育场的半径约为70米。在距离中心约30米的地方,有一条环形通道,这架相机可能就在那里
结果:
下面是一个更加充实的脚本,它使用
calibrateCamera
并确定了各种参数。这似乎会带来更稳定的结果https://gist.github.com/crackwitz/0d1e401b597b435bcc5e65349cbca870
相关问题 更多 >
编程相关推荐