2015-03-31 1 views
3

я получаю следующее сообщение об ошибке при попытке откалибровать камеру с помощью cv2.calibrateCamera:входные аргументы cv2.calibrateCamera питона

rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(pts3d, pts2d, self.imgsize, None, None) 
cv2.error: /home/sarkar/opencv/opencv/modules/calib3d/src/calibration.cpp:2976: error: (-210) objectPoints should contain vector of vectors of points of type Point3f in function collectCalibrationData 

я изначально имел NX3 и массив NX2 для pts3d и pts2d. Затем я попытался изменить pts3d и pts2d в следующем виде, как функция принимает векторы векторного Point3d (и, соответственно, pts2d) в качестве входных данных:

[1 хпх 3] и [1 хпх 2]

[Kxn» х 3] и [Kxn»х 3], где к случайному значению

[1 хпе 1 х 3] и [1 хпх 1 х 2]

ничего не работает, и это всегда дает ту же ошибку.

Я видел код кода кода камеры, который работает отлично, и их вход имеет значение [k x n x 3]. Я действительно не знаю, что не так с моей реализацией. Ниже приводится мой код, который должен быть точным:

#data contains [n x 5] dim array which is the hstacked arrays of pts3d and pts2d correspondences I obtained elsewhere. 
    pts3d = data[:, 0:3] #first 3 column 
    pts2d = data[:, 3:5] #next 2 column.. I checked the values are coming correctly 
    pts3d = pts3d.reshape(1,-1, 3) #Here, I have experimented by resizing with different values. 
    pts2d = pts2d.reshape(1,-1, 2) 

    rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(pts3d, pts2d, self.imgsize, None, None)  

ошибка происходит во время вызова функции. Было бы неплохо узнать, что здесь может быть неправильным.

ответ

5

У меня была такая же проблема, и нашел ответ на него в этой теме: OpenCV 2.3 camera calibration

Основные шаги являются:

pts3d = pts3d.astype('float32') 
pts2d = pts2d.astype('float32') 

# This can be omitted and can be substituted with None below. 
camera_matrix = cv2.initCameraMatrix2D([pts3d],[pts2d]), self.imgsize) 

cv2.calibrateCamera([pts3d], [pts2d], self.imgsize, camera_matrix, None, 
        flags=cv2.CALIB_USE_INTRINSIC_GUESS) 

Она была написана для OpenCV 2.3, но это работает для меня даже с OpenCV 3.0 (ветвь dev в git) с Python 3.3.5 (64 бит).

+0

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – NathanOliver

+0

Спасибо за комментарий. Я добавил основные шаги. – Csega