Skip to content

Commit c5390b2

Browse files
committed
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
2 parents b65b3cc + 8f3aa5c commit c5390b2

File tree

2 files changed

+28
-24
lines changed

2 files changed

+28
-24
lines changed

modules/sfm/src/libmv_capi.h

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ struct libmv_Reconstruction {
7575
EuclideanReconstruction reconstruction;
7676
/* Used for per-track average error calculation after reconstruction */
7777
Tracks tracks;
78-
CameraIntrinsics *intrinsics;
78+
std::shared_ptr<CameraIntrinsics> intrinsics;
7979
double error;
8080
bool is_valid;
8181
};
@@ -252,21 +252,22 @@ static void libmv_cameraIntrinsicsFillFromOptions(
252252
* options values.
253253
*/
254254

255-
static CameraIntrinsics* libmv_cameraIntrinsicsCreateFromOptions(
255+
static
256+
std::shared_ptr<CameraIntrinsics> libmv_cameraIntrinsicsCreateFromOptions(
256257
const libmv_CameraIntrinsicsOptions* camera_intrinsics_options) {
257-
CameraIntrinsics *camera_intrinsics = NULL;
258+
std::shared_ptr<CameraIntrinsics> camera_intrinsics;
258259
switch (camera_intrinsics_options->distortion_model) {
259260
case SFM_DISTORTION_MODEL_POLYNOMIAL:
260-
camera_intrinsics = new PolynomialCameraIntrinsics();
261+
camera_intrinsics = std::make_shared<PolynomialCameraIntrinsics>();
261262
break;
262263
case SFM_DISTORTION_MODEL_DIVISION:
263-
camera_intrinsics = new DivisionCameraIntrinsics();
264+
camera_intrinsics = std::make_shared<DivisionCameraIntrinsics>();
264265
break;
265266
default:
266267
assert(!"Unknown distortion model");
267268
}
268269
libmv_cameraIntrinsicsFillFromOptions(camera_intrinsics_options,
269-
camera_intrinsics);
270+
camera_intrinsics.get());
270271
return camera_intrinsics;
271272
}
272273

@@ -361,19 +362,19 @@ static void finishReconstruction(
361362
/* Perform the complete reconstruction process
362363
*/
363364

364-
static libmv_Reconstruction *libmv_solveReconstruction(
365+
static
366+
std::shared_ptr<libmv_Reconstruction> libmv_solveReconstruction(
365367
const Tracks &libmv_tracks,
366368
const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
367369
libmv_ReconstructionOptions* libmv_reconstruction_options) {
368-
libmv_Reconstruction *libmv_reconstruction =
369-
new libmv_Reconstruction();
370+
std::shared_ptr<libmv_Reconstruction> libmv_reconstruction = std::make_shared<libmv_Reconstruction>();
370371

371372
Tracks tracks = libmv_tracks;
372373
EuclideanReconstruction &reconstruction =
373374
libmv_reconstruction->reconstruction;
374375

375376
/* Retrieve reconstruction options from C-API to libmv API. */
376-
CameraIntrinsics *camera_intrinsics;
377+
std::shared_ptr<CameraIntrinsics> camera_intrinsics;
377378
camera_intrinsics = libmv_reconstruction->intrinsics =
378379
libmv_cameraIntrinsicsCreateFromOptions(libmv_camera_intrinsics_options);
379380

@@ -426,18 +427,18 @@ static libmv_Reconstruction *libmv_solveReconstruction(
426427
libmv_reconstruction_options->refine_intrinsics,
427428
libmv::BUNDLE_NO_CONSTRAINTS,
428429
&reconstruction,
429-
camera_intrinsics);
430+
camera_intrinsics.get());
430431
}
431432

432433
/* Set reconstruction scale to unity. */
433434
EuclideanScaleToUnity(&reconstruction);
434435

435436
finishReconstruction(tracks,
436437
*camera_intrinsics,
437-
libmv_reconstruction);
438+
libmv_reconstruction.get());
438439

439440
libmv_reconstruction->is_valid = true;
440-
return (libmv_Reconstruction *) libmv_reconstruction;
441+
return libmv_reconstruction;
441442
}
442443

443444
#endif

modules/sfm/src/simple_pipeline.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ parser_2D_tracks( const libmv::Matches &matches, libmv::Tracks &tracks )
118118
* reconstruction pipeline.
119119
*/
120120

121-
static libmv_Reconstruction *libmv_solveReconstructionImpl(
121+
static
122+
std::shared_ptr<libmv_Reconstruction> libmv_solveReconstructionImpl(
122123
const std::vector<String> &images,
123124
const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
124125
libmv_ReconstructionOptions* libmv_reconstruction_options)
@@ -182,9 +183,10 @@ class SFMLibmvReconstructionImpl : public T
182183

183184
// Perform reconstruction
184185
libmv_reconstruction_ =
185-
*libmv_solveReconstruction(tracks,
186+
libmv_solveReconstruction(tracks,
186187
&libmv_camera_intrinsics_options_,
187188
&libmv_reconstruction_options_);
189+
CV_Assert(libmv_reconstruction_);
188190
}
189191

190192
virtual void run(InputArrayOfArrays points2d, InputOutputArray K, OutputArray Rs,
@@ -216,9 +218,10 @@ class SFMLibmvReconstructionImpl : public T
216218
// Perform reconstruction
217219

218220
libmv_reconstruction_ =
219-
*libmv_solveReconstructionImpl(images,
221+
libmv_solveReconstructionImpl(images,
220222
&libmv_camera_intrinsics_options_,
221223
&libmv_reconstruction_options_);
224+
CV_Assert(libmv_reconstruction_);
222225
}
223226

224227

@@ -232,12 +235,12 @@ class SFMLibmvReconstructionImpl : public T
232235
extractLibmvReconstructionData(K, Rs, Ts, points3d);
233236
}
234237

235-
virtual double getError() const { return libmv_reconstruction_.error; }
238+
virtual double getError() const { return libmv_reconstruction_->error; }
236239

237240
virtual void
238241
getPoints(OutputArray points3d) {
239242
const size_t n_points =
240-
libmv_reconstruction_.reconstruction.AllPoints().size();
243+
libmv_reconstruction_->reconstruction.AllPoints().size();
241244

242245
points3d.create(n_points, 1, CV_64F);
243246

@@ -246,22 +249,22 @@ class SFMLibmvReconstructionImpl : public T
246249
{
247250
for ( int j = 0; j < 3; ++j )
248251
point3d[j] =
249-
libmv_reconstruction_.reconstruction.AllPoints()[i].X[j];
252+
libmv_reconstruction_->reconstruction.AllPoints()[i].X[j];
250253
Mat(point3d).copyTo(points3d.getMatRef(i));
251254
}
252255

253256
}
254257

255258
virtual cv::Mat getIntrinsics() const {
256259
Mat K;
257-
eigen2cv(libmv_reconstruction_.intrinsics->K(), K);
260+
eigen2cv(libmv_reconstruction_->intrinsics->K(), K);
258261
return K;
259262
}
260263

261264
virtual void
262265
getCameras(OutputArray Rs, OutputArray Ts) {
263266
const size_t n_views =
264-
libmv_reconstruction_.reconstruction.AllCameras().size();
267+
libmv_reconstruction_->reconstruction.AllCameras().size();
265268

266269
Rs.create(n_views, 1, CV_64F);
267270
Ts.create(n_views, 1, CV_64F);
@@ -270,8 +273,8 @@ class SFMLibmvReconstructionImpl : public T
270273
Vec3d t;
271274
for(size_t i = 0; i < n_views; ++i)
272275
{
273-
eigen2cv(libmv_reconstruction_.reconstruction.AllCameras()[i].R, R);
274-
eigen2cv(libmv_reconstruction_.reconstruction.AllCameras()[i].t, t);
276+
eigen2cv(libmv_reconstruction_->reconstruction.AllCameras()[i].R, R);
277+
eigen2cv(libmv_reconstruction_->reconstruction.AllCameras()[i].t, t);
275278
Mat(R).copyTo(Rs.getMatRef(i));
276279
Mat(t).copyTo(Ts.getMatRef(i));
277280
}
@@ -300,7 +303,7 @@ class SFMLibmvReconstructionImpl : public T
300303
getIntrinsics().copyTo(K.getMat());
301304
}
302305

303-
libmv_Reconstruction libmv_reconstruction_;
306+
std::shared_ptr<libmv_Reconstruction> libmv_reconstruction_;
304307
libmv_ReconstructionOptions libmv_reconstruction_options_;
305308
libmv_CameraIntrinsicsOptions libmv_camera_intrinsics_options_;
306309
};

0 commit comments

Comments
 (0)