-
Couldn't load subscription status.
- Fork 5.9k
Description
Hi Everyone,
I'm messing around with the sfm module and doing a 3D reconstruction from a video file. I've compiled the OpenCV project with the contributed modules on my machine (Mac OS X 10.11.6, python 3.6 Anaconda) with python bindings for sfm. Compilation was successful, and I am able to successfully run the example_sfm_scene_reconstruction program.
For the problem I'm having, the general program is as follows:
- Extract the location of
ORBfeatures for the first 8 images from the video - Compile the features into a python
list, where each element of the list is a 2XN (where N is the number of features detected in the image, typically 100 points so 2X100) numpy array. - Load the camera calibration matrix from a previously stored file
- Call the
sfm::reconstruct(InputArrayOfArrays points2d, OutputArray Ps, OutputArray points3d, InputOutputArray K, bool is_projective)via the python binding.
Code is as follows
# get all the keypoints, save them in a pandas dataframe
all_keypoints = []
for idx, im in tqdm(zip(range(idx_start, idx_stop),images),desc='gettingkeypoints',total=len(images)):
# kps = fast_detector.detect(im)
kps = orb_detector.detect(im)
for kp in kps:
all_keypoints.append({'frame':idx, 'x':kp.pt[0], 'y':kp.pt[1]})
# get the keypoints for the first 8 frames
samped_frames = list(set(kp_df.loc[:, 'frame'].values.tolist()))
samped_frames = samped_frames[0:8]
kps_for_recon = []
for idx in samped_frames:
kps_data = kp_df.loc[kp_df['frame']==idx, ['x','y']]
kps_for_recon.append(np.matrix(kps_data.values.transpose().astype(np.float32).copy()))
# get the camera calibration data
lcm = pd.read_csv(left_cam_cal_file, index_col=0)
lcm = lcm.values.astype(np.float32).copy()
# run scene reconstruction
cv2.sfm.reconstruct(kps_for_recon, lcm, None, None, True)The code starts to run, then I get an error:
error: (-215:Assertion failed) k == STD_VECTOR_MAT || k == STD_ARRAY_MAT in function 'getMatRef'
Based on how I understand the sfm::reconstruct function works, I think the error is coming from the line linked below.
| Mat(P).copyTo(Ps.getMatRef(i)); |
Camera matrix:
1685.72249 | 0.000000 | 689.894140
0.00000 | 1749.486859 | 767.726025
0.00000 | 0.000000 | 1.000000Any help much appreciated. I'm really not sure where the error is coming from.