@ -149,12 +149,13 @@ public:
int runKernel ( InputArray _m1 , InputArray _m2 , OutputArray _model ) const CV_OVERRIDE
int runKernel ( InputArray _m1 , InputArray _m2 , OutputArray _model ) const CV_OVERRIDE
{
{
Mat opoints = _m1 . getMat ( ) , ipoints = _m2 . getMat ( ) ;
Mat opoints = _m1 . getMat ( ) , ipoints = _m2 . getMat ( ) ;
Mat iter_rvec = rvec . clone ( ) ;
Mat iter_tvec = tvec . clone ( ) ;
bool correspondence = solvePnP ( _m1 , _m2 , cameraMatrix , distCoeffs ,
bool correspondence = solvePnP ( _m1 , _m2 , cameraMatrix , distCoeffs ,
rvec , tvec , useExtrinsicGuess , flags ) ;
iter_ rvec, iter_ tvec, useExtrinsicGuess , flags ) ;
Mat _local_model ;
Mat _local_model ;
hconcat ( rvec , tvec , _local_model ) ;
hconcat ( iter_ rvec, iter_ tvec, _local_model ) ;
_local_model . copyTo ( _model ) ;
_local_model . copyTo ( _model ) ;
return correspondence ;
return correspondence ;
@ -313,7 +314,13 @@ bool solvePnPRansac(InputArray _opoints, InputArray _ipoints,
ipoints_inliers . resize ( npoints1 ) ;
ipoints_inliers . resize ( npoints1 ) ;
try
try
{
{
result = solvePnP ( opoints_inliers , ipoints_inliers , cameraMatrix ,
if ( flags = = SOLVEPNP_ITERATIVE & & ! useExtrinsicGuess )
{
rvec = _local_model . col ( 0 ) . clone ( ) ;
tvec = _local_model . col ( 1 ) . clone ( ) ;
useExtrinsicGuess = true ;
}
result = solvePnP ( opoints_inliers , ipoints_inliers , cameraMatrix ,
distCoeffs , rvec , tvec , useExtrinsicGuess ,
distCoeffs , rvec , tvec , useExtrinsicGuess ,
( flags = = SOLVEPNP_P3P | | flags = = SOLVEPNP_AP3P ) ? SOLVEPNP_EPNP : flags ) ? 1 : - 1 ;
( flags = = SOLVEPNP_P3P | | flags = = SOLVEPNP_AP3P ) ? SOLVEPNP_EPNP : flags ) ? 1 : - 1 ;
}
}