calibrationMatrixValues: bind C++ function in C instead of vice versa

This commit is contained in:
Pavel Rojtberg 2016-04-26 18:02:47 +02:00
parent 6e5e5d87df
commit 86959310f9

View File

@ -1626,58 +1626,24 @@ void cvCalibrationMatrixValues( const CvMat *calibMatr, CvSize imgSize,
double apertureWidth, double apertureHeight, double *fovx, double *fovy,
double *focalLength, CvPoint2D64f *principalPoint, double *pasp )
{
double alphax, alphay, mx, my;
int imgWidth = imgSize.width, imgHeight = imgSize.height;
/* Validate parameters. */
if(calibMatr == 0)
CV_Error(CV_StsNullPtr, "Some of parameters is a NULL pointer!");
if(!CV_IS_MAT(calibMatr))
CV_Error(CV_StsUnsupportedFormat, "Input parameters must be a matrices!");
if(calibMatr->cols != 3 || calibMatr->rows != 3)
CV_Error(CV_StsUnmatchedSizes, "Size of matrices must be 3x3!");
alphax = cvmGet(calibMatr, 0, 0);
alphay = cvmGet(calibMatr, 1, 1);
assert(imgWidth != 0 && imgHeight != 0 && alphax != 0.0 && alphay != 0.0);
/* Calculate pixel aspect ratio. */
if(pasp)
*pasp = alphay / alphax;
/* Calculate number of pixel per realworld unit. */
if(apertureWidth != 0.0 && apertureHeight != 0.0) {
mx = imgWidth / apertureWidth;
my = imgHeight / apertureHeight;
} else {
mx = 1.0;
if(pasp)
my = *pasp;
else
my = 1.0;
}
/* Calculate fovx and fovy. */
if(fovx)
*fovx = 2 * atan(imgWidth / (2 * alphax)) * 180.0 / CV_PI;
if(fovy)
*fovy = 2 * atan(imgHeight / (2 * alphay)) * 180.0 / CV_PI;
/* Calculate focal length. */
if(focalLength)
*focalLength = alphax / mx;
/* Calculate principle point. */
double dummy;
Point2d pp;
cv::calibrationMatrixValues(cvarrToMat(calibMatr), imgSize, apertureWidth, apertureHeight,
fovx ? *fovx : dummy,
fovy ? *fovy : dummy,
focalLength ? *focalLength : dummy,
pp,
pasp ? *pasp : dummy);
if(principalPoint)
*principalPoint = cvPoint2D64f(cvmGet(calibMatr, 0, 2) / mx, cvmGet(calibMatr, 1, 2) / my);
*principalPoint = cvPoint2D64f(pp.x, pp.y);
}
@ -3369,10 +3335,35 @@ void cv::calibrationMatrixValues( InputArray _cameraMatrix, Size imageSize,
double& fovx, double& fovy, double& focalLength,
Point2d& principalPoint, double& aspectRatio )
{
Mat cameraMatrix = _cameraMatrix.getMat();
CvMat c_cameraMatrix = cameraMatrix;
cvCalibrationMatrixValues( &c_cameraMatrix, imageSize, apertureWidth, apertureHeight,
&fovx, &fovy, &focalLength, (CvPoint2D64f*)&principalPoint, &aspectRatio );
if(_cameraMatrix.size() != Size(3, 3))
CV_Error(CV_StsUnmatchedSizes, "Size of cameraMatrix must be 3x3!");
Matx33d K = _cameraMatrix.getMat();
CV_DbgAssert(imageSize.width != 0 && imageSize.height != 0 && K(0, 0) != 0.0 && K(1, 1) != 0.0);
/* Calculate pixel aspect ratio. */
aspectRatio = K(1, 1) / K(0, 0);
/* Calculate number of pixel per realworld unit. */
double mx, my;
if(apertureWidth != 0.0 && apertureHeight != 0.0) {
mx = imageSize.width / apertureWidth;
my = imageSize.height / apertureHeight;
} else {
mx = 1.0;
my = aspectRatio;
}
/* Calculate fovx and fovy. */
fovx = 2 * atan(imageSize.width / (2 * K(0, 0))) * 180.0 / CV_PI;
fovy = 2 * atan(imageSize.height / (2 * K(1, 1))) * 180.0 / CV_PI;
/* Calculate focal length. */
focalLength = K(0, 0) / mx;
/* Calculate principle point. */
principalPoint = Point2d(K(0, 2) / mx, K(1, 2) / my);
}
double cv::stereoCalibrate( InputArrayOfArrays _objectPoints,