mirror of
https://github.com/opencv/opencv.git
synced 2024-11-25 19:50:38 +08:00
Test Run OK
This commit is contained in:
parent
89246e1a45
commit
a5d40d7674
@ -340,7 +340,9 @@ bool cv::solvePnPRansac(InputArray _opoints, InputArray _ipoints,
|
||||
{
|
||||
|
||||
Mat opoints = _opoints.getMat(), ipoints = _ipoints.getMat();
|
||||
Mat cameraMatrix = _cameraMatrix.getMat(), distCoeffs = _distCoeffs.getMat();
|
||||
|
||||
int npoints = std::max(opoints.checkVector(3, CV_32F), opoints.checkVector(3, CV_64F));
|
||||
CV_Assert( npoints >= 0 && npoints == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) );
|
||||
|
||||
CV_Assert(opoints.isContinuous());
|
||||
CV_Assert(opoints.depth() == CV_32F || opoints.depth() == CV_64F);
|
||||
@ -354,26 +356,30 @@ bool cv::solvePnPRansac(InputArray _opoints, InputArray _ipoints,
|
||||
|
||||
Mat rvec = useExtrinsicGuess ? _rvec.getMat() : Mat(3, 1, CV_64FC1);
|
||||
Mat tvec = useExtrinsicGuess ? _tvec.getMat() : Mat(3, 1, CV_64FC1);
|
||||
Mat cameraMatrix = _cameraMatrix.getMat(), distCoeffs = _distCoeffs.getMat();
|
||||
|
||||
Ptr<PointSetRegistrator::Callback> cb; // pointer to callback
|
||||
cb = makePtr<PnPRansacCallback>( cameraMatrix, distCoeffs, flags, useExtrinsicGuess, rvec, tvec);
|
||||
|
||||
int model_points = 6; // minimum of number of model points
|
||||
double param1 = reprojectionError ; // reprojection error
|
||||
double param2 = confidence; // confidence
|
||||
int param3 = iterationsCount; // number maximum iterations
|
||||
int model_points = flags == cv::P3P ? 4 : 6; // minimum of number of model points
|
||||
double param1 = reprojectionError; // reprojection error
|
||||
double param2 = confidence; // confidence
|
||||
int param3 = iterationsCount; // number maximum iterations
|
||||
|
||||
cv::Mat _local_model(3, 2, CV_64FC1);
|
||||
cv::Mat _mask_local_inliers(1, opoints.rows, CV_8UC1);
|
||||
|
||||
// call Ransac
|
||||
int result = createRANSACPointSetRegistrator(cb, model_points, param1, param2, param3)->run(_opoints, _ipoints, _local_model, _mask_local_inliers);
|
||||
int result = createRANSACPointSetRegistrator(cb, model_points, param1, param2, param3)->run(opoints, ipoints, _local_model, _mask_local_inliers);
|
||||
|
||||
if( result <= 0 || _local_model.rows <= 0)
|
||||
{
|
||||
_rvec.assign(rvec); // output rotation vector
|
||||
_tvec.assign(tvec); // output translation vector
|
||||
|
||||
if( _inliers.needed() )
|
||||
_inliers.release();
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
@ -382,18 +388,20 @@ bool cv::solvePnPRansac(InputArray _opoints, InputArray _ipoints,
|
||||
_tvec.assign(_local_model.col(1)); // output translation vector
|
||||
}
|
||||
|
||||
Mat _local_inliers;
|
||||
int count = 0;
|
||||
for (int i = 0; i < _mask_local_inliers.rows; ++i)
|
||||
{
|
||||
if((int)_mask_local_inliers.at<uchar>(i) == 1) // inliers mask
|
||||
if(_inliers.needed())
|
||||
{
|
||||
Mat _local_inliers;
|
||||
int count = 0;
|
||||
for (int i = 0; i < _mask_local_inliers.rows; ++i)
|
||||
{
|
||||
_local_inliers.push_back(count); // output inliers vector
|
||||
count++;
|
||||
if((int)_mask_local_inliers.at<uchar>(i) == 1) // inliers mask
|
||||
{
|
||||
_local_inliers.push_back(count); // output inliers vector
|
||||
count++;
|
||||
}
|
||||
}
|
||||
_local_inliers.copyTo(_inliers);
|
||||
}
|
||||
_local_inliers.copyTo(_inliers);
|
||||
|
||||
|
||||
// OLD IMPLEMENTATION
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user