mirror of
https://github.com/opencv/opencv.git
synced 2024-11-29 13:47:32 +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 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.isContinuous());
|
||||||
CV_Assert(opoints.depth() == CV_32F || opoints.depth() == CV_64F);
|
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 rvec = useExtrinsicGuess ? _rvec.getMat() : Mat(3, 1, CV_64FC1);
|
||||||
Mat tvec = useExtrinsicGuess ? _tvec.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
|
Ptr<PointSetRegistrator::Callback> cb; // pointer to callback
|
||||||
cb = makePtr<PnPRansacCallback>( cameraMatrix, distCoeffs, flags, useExtrinsicGuess, rvec, tvec);
|
cb = makePtr<PnPRansacCallback>( cameraMatrix, distCoeffs, flags, useExtrinsicGuess, rvec, tvec);
|
||||||
|
|
||||||
int model_points = 6; // minimum of number of model points
|
int model_points = flags == cv::P3P ? 4 : 6; // minimum of number of model points
|
||||||
double param1 = reprojectionError ; // reprojection error
|
double param1 = reprojectionError; // reprojection error
|
||||||
double param2 = confidence; // confidence
|
double param2 = confidence; // confidence
|
||||||
int param3 = iterationsCount; // number maximum iterations
|
int param3 = iterationsCount; // number maximum iterations
|
||||||
|
|
||||||
cv::Mat _local_model(3, 2, CV_64FC1);
|
cv::Mat _local_model(3, 2, CV_64FC1);
|
||||||
cv::Mat _mask_local_inliers(1, opoints.rows, CV_8UC1);
|
cv::Mat _mask_local_inliers(1, opoints.rows, CV_8UC1);
|
||||||
|
|
||||||
// call Ransac
|
// 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)
|
if( result <= 0 || _local_model.rows <= 0)
|
||||||
{
|
{
|
||||||
_rvec.assign(rvec); // output rotation vector
|
_rvec.assign(rvec); // output rotation vector
|
||||||
_tvec.assign(tvec); // output translation vector
|
_tvec.assign(tvec); // output translation vector
|
||||||
|
|
||||||
|
if( _inliers.needed() )
|
||||||
|
_inliers.release();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -382,18 +388,20 @@ bool cv::solvePnPRansac(InputArray _opoints, InputArray _ipoints,
|
|||||||
_tvec.assign(_local_model.col(1)); // output translation vector
|
_tvec.assign(_local_model.col(1)); // output translation vector
|
||||||
}
|
}
|
||||||
|
|
||||||
Mat _local_inliers;
|
if(_inliers.needed())
|
||||||
int count = 0;
|
{
|
||||||
for (int i = 0; i < _mask_local_inliers.rows; ++i)
|
Mat _local_inliers;
|
||||||
{
|
int count = 0;
|
||||||
if((int)_mask_local_inliers.at<uchar>(i) == 1) // inliers mask
|
for (int i = 0; i < _mask_local_inliers.rows; ++i)
|
||||||
{
|
{
|
||||||
_local_inliers.push_back(count); // output inliers vector
|
if((int)_mask_local_inliers.at<uchar>(i) == 1) // inliers mask
|
||||||
count++;
|
{
|
||||||
|
_local_inliers.push_back(count); // output inliers vector
|
||||||
|
count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
_local_inliers.copyTo(_inliers);
|
||||||
}
|
}
|
||||||
_local_inliers.copyTo(_inliers);
|
|
||||||
|
|
||||||
|
|
||||||
// OLD IMPLEMENTATION
|
// OLD IMPLEMENTATION
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user