Ошибка «Для неплоских калибровочных установок исходная внутренняя матрица должна быть указана в функции «cvCalibrateCamePython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка «Для неплоских калибровочных установок исходная внутренняя матрица должна быть указана в функции «cvCalibrateCame

Сообщение Anonymous »

Полная трассировка ошибки, с которой я столкнулся:

in Stereo_калибровате
ret, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F, perViewErrors, _, _= cv2.stereoCalibrateExtended(
cv2.error: OpenCV(4.10.0) /io/opencv/modules/calib3d/src/калибровка.cpp:1682: ошибка: ( -5: Плохой аргумент) Для неплоских калибровочных установок исходная внутренняя матрица должна быть указана в функции «cvCalibrateCamera2Internal»

Вот мой код:

Код: Выделить всё

def stereo_calibrate(img, correspondences_left, correspondences_right, camera_matrix_L, camera_matrix_R, baseline=4.1, dist_coeffs=None):
if dist_coeffs is None:
dist_coeffs = np.zeros((4, 1))

# Extract image points and object points from correspondences
image_points_left = correspondences_left[:, :2].astype(np.float32)
image_points_right = correspondences_right[:, :2].astype(np.float32)
object_points = correspondences_left[:, 2:].astype(np.float32)  # Assuming object points are the same for both sets

rvec_L, tvec_L = np.array([0., 0., 0.]), np.array([0, 0., 0.])
rvec_R, tvec_R = np.array([-0.00637872, 0.00102092, 0.000673804]), np.array([0., 0., 0.])

# Convert rotation vectors to rotation matrices
R_L, _ = cv2.Rodrigues(rvec_L)
R_R, _ = cv2.Rodrigues(rvec_R)
print("after converting via Rodrigues:", R_L, R_R)

# Initialize rotation and translation vectors
R_init = R_R @ R_L.T
# T_init = tvec_R - R_init @ tvec_L
T_init = np.array([0., 0., 0.])
print("R_init", R_init)
print("T_init", T_init)

# Stereo calibration to refine the extrinsic parameters
ret, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F, perViewErrors, _, _= cv2.stereoCalibrateExtended(
[object_points], [image_points_left], [image_points_right],
camera_matrix_L, dist_coeffs, camera_matrix_R, dist_coeffs,
imageSize=(img.shape[1], img.shape[0]),  # Correct image size as (width, height)
R=R_init, T=T_init,
criteria=(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 1e-6),
flags=cv2.CALIB_USE_EXTRINSIC_GUESS
)
print("ret", ret)
if ret:
print("Stereo Calibration Successful")
print("Rotation Matrix between the cameras:")
print(R)
print("Translation Vector between the cameras:")
print(T)
print("dist_coeffs1", distCoeffs1)
print("dist_coeffs2", distCoeffs2)
print(rvec_L)
print(tvec_L)
else:
raise ValueError("stereoCalibrate failed to find a solution")

# Reproject object points to both cameras
reprojected_points_left, _ = cv2.projectPoints(object_points, rvec_L, tvec_L, camera_matrix_L, distCoeffs1)
reprojected_points_right, _ = cv2.projectPoints(object_points, R, T, camera_matrix_R, distCoeffs2)

return R, T, reprojected_points_left, reprojected_points_right

correspondences_left = np.array([
[671.0889955686854, 193.80354505169868, 2.4492935982947064e-16, -4.0, 11],
...
])

correspondences_right = np.array([
[436.2245592329106, 193.79399938137954, 2.4492935982947064e-16, -4.0, 11],
...
])

# Camera intrinsic parameters, replace with your actual camera matrix
camera_matrix_L = np.array([
[1018.9, 0, 601.447],
[0, 1018.9, 517.462],
[0, 0, 1]
], dtype=np.float32)

camera_matrix_R = np.array([
[1018.9, 0, 690.392],
[0, 1018.9, 517.462],
[0, 0, 1]
], dtype=np.float32)

# calling the function
R, T, reprojected_points_left, reprojected_points_right = stereo_calibrate(img_left, correspondences_left, correspondences_right, camera_matrix_L, camera_matrix_R)
Эта ошибка меня действительно озадачивает, поскольку я явно передаю исходные внутренние матрицы камеры. Почему возникает эта ошибка?

Подробнее здесь: https://stackoverflow.com/questions/787 ... st-be-spec
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»