калибровка камеры "рыбий глаз" стереозрения - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь сделать fish-eye stereo calibration, используя Opencv и Python Сначала я выполнил стереокалибровку одной камеры

print("Calibrating left fisheye camera...")
rms, _, _, _, _ = cv2.fisheye.calibrate(objectPoints,leftImagePoints,imageSize, K_left,D_left,R,T,flags,(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6))
print("calibrating right fisheye camera...")
rms, _, _, _, _ = cv2.fisheye.calibrate(objectPoints,rightImagePoints, imageSize,K_right,D_right,R,T,flags, (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6))

но на следующем шаге, когда я пытаюсь сделать stereofisheye calibration:

print("calibrating both fisheye cameras together...")
(rms,K1, D1, K2, D2, R, T) = cv2.fisheye.stereoCalibrate(
    objectPoints,
    leftImagePoints,
    rightImagePoints,
    K_left,
    D_left,
    K_right,
    D_right,
    imageSize)

Выдает ошибку:

Traceback (последний вызов был последним): Файл "fisheye_calib1.py", строка 177, в Размер изображения) cv2.error: OpenCV (4.0.0-pre) / home / compute / OpenCV-tmp / opencv- 3 / modules / core / src / arithm.cpp: 683: ошибка: (-5: неверный аргумент) Когда входные массивы в функциях сложения / вычитания / умножения / деления имеют различные типы, тип выходного массива должен быть явно указан в функция 'arithm_op'

Как я новичок в OpenCV. Я действительно смущен, какой шаг я должен предпринять, чтобы избежать этой ошибки.

1 Ответ

0 голосов
/ 24 августа 2018

Добро пожаловать в переполнение стека!

Похоже, что массивы, которые вы отправляете на stereoCalibrate, не того же типа. Например, посмотрите этот вопрос , где кто-то боролся с тем же сообщением об ошибке. Я нашел его после быстрого поиска в Google вашего кода ошибки.

Таким образом, я предполагаю, что исправлением было бы убедиться, что все ваши матрицы имеют один и тот же тип. Убедитесь, что вы инициализируете их таким же образом. Например, они создаются как списки ([4,4,5]) или как Numpy -массивы (типичные выходные данные OpenCV)? Эти двое не будут работать вместе.

Если вы все еще боретесь, вы можете форсировать это прямо перед stereoCalibrate с помощью:

objectPoints = numpy.array(K_left, np.float)
...
K_left = ... # Do the above operation on each one
...
D_right = ...

Надеюсь, это поможет!

Примечание: для моего решения вам понадобится импортированный пакет Numpy

...