44 #include <visp3/core/vpCameraParameters.h>
45 #include <visp3/core/vpDebug.h>
46 #include <visp3/core/vpMath.h>
47 #include <visp3/core/vpMeterPixelConversion.h>
48 #include <visp3/core/vpPixelMeterConversion.h>
52 #ifdef ENABLE_VISP_NAMESPACE
57 std::cout <<
"* Test operator=()" << std::endl;
62 std::cerr <<
"Issue with vpCameraParameters comparison operator." << std::endl;
68 std::cerr <<
"Issue with vpCameraParameters comparison operator." << std::endl;
72 std::cout <<
"* Test computeFov()" << std::endl;
75 std::cerr <<
"Issue with vpCameraParameters comparison operator." << std::endl;
81 double px, py, u0, v0;
87 double px_dist, py_dist, u0_dist, v0_dist, kud_dist, kdu_dist;
88 px_dist = 1624.824731;
89 py_dist = 1625.263641;
90 u0_dist = 324.0923411;
91 v0_dist = 245.2421388;
92 kud_dist = -0.1741532338;
93 kdu_dist = 0.1771165148;
100 double x1 = 0, y1 = 0;
101 double u2 = 0, v2 = 0;
102 std::cout <<
"* Test point conversion without distortion" << std::endl;
106 std::cerr <<
"Error in point conversion without distortion:\n"
107 <<
"u1 = " << u1 <<
", u2 = " << u2 << std::endl
108 <<
"v1 = " << v1 <<
", v2 = " << v2 << std::endl;
112 std::cout <<
"* Test point conversion with distortion" << std::endl;
116 std::cerr <<
"Error in point conversion without distortion:\n"
117 <<
"u1 = " << u1 <<
", u2 = " << u2 << std::endl
118 <<
"v1 = " << v1 <<
", v2 = " << v2 << std::endl;
122 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_IMGPROC)
124 std::cout <<
"* Compare ViSP and OpenCV point pixel meter conversion without distortion" << std::endl;
125 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1);
126 cv::Mat distCoeffs = cv::Mat::zeros(5, 1, CV_64FC1);
132 std::cerr <<
"Error in point pixel meter conversion: visp result (" << x1 <<
", " << y1 <<
") "
133 <<
"differ from OpenCV result (" << x2 <<
", " << y2 <<
")" << std::endl;
141 std::cerr <<
"Error in point pixel meter conversion: visp result (" << x1 <<
", " << y1 <<
") "
142 <<
"differ from OpenCV result (" << x2 <<
", " << y2 <<
")" << std::endl;
146 std::cout <<
"* Compare ViSP and OpenCV point meter pixel conversion without distortion" << std::endl;
150 std::cerr <<
"Error in point meter pixel conversion: visp result (" << u1 <<
", " << v1 <<
") "
151 <<
"differ from OpenCV result (" << u2 <<
", " << v2 <<
")" << std::endl;
159 std::cerr <<
"Error in point meter pixel conversion: visp result (" << u1 <<
", " << v1 <<
") "
160 <<
"differ from OpenCV result (" << u2 <<
", " << v2 <<
")" << std::endl;
166 std::cout <<
"* Compare ViSP and OpenCV point pixel meter conversion with distortion" << std::endl;
167 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px_dist, 0, u0_dist, 0, py_dist, v0_dist, 0, 0, 1);
168 cv::Mat distCoeffs = cv::Mat::zeros(5, 1, CV_64FC1);
169 distCoeffs.at<
double>(0, 0) = kdu_dist;
175 std::cerr <<
"Error in point conversion: visp result (" << x1 <<
", " << y1 <<
") "
176 <<
"differ from OpenCV result (" << x2 <<
", " << y2 <<
")" << std::endl;
180 std::cout <<
"* Compare ViSP and OpenCV point meter pixel conversion with distortion" << std::endl;
181 distCoeffs.at<
double>(0, 0) = kud_dist;
185 std::cerr <<
"Error in point meter pixel conversion: visp result (" << u1 <<
", " << v1 <<
") "
186 <<
"differ from OpenCV result (" << u2 <<
", " << v2 <<
")" << std::endl;
192 std::cout <<
"* Compare ViSP and OpenCV line pixel meter conversion without distortion" << std::endl;
193 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1);
195 double rho_m1, theta_m1, rho_m2, theta_m2;
200 std::cerr <<
"Error in line pixel meter conversion: visp result (" << rho_m1 <<
", " << theta_m1 <<
") "
201 <<
"differ from OpenCV result (" << rho_m2 <<
", " << theta_m1 <<
")" << std::endl;
205 std::cout <<
"* Compare ViSP and OpenCV line meter pixel conversion without distortion" << std::endl;
206 double rho_p1, theta_p1, rho_p2, theta_p2;
210 std::cerr <<
"Error in line meter pixel conversion: visp result (" << rho_p1 <<
", " << theta_p1 <<
") "
211 <<
"differ from OpenCV result (" << rho_p2 <<
", " << theta_p1 <<
")" << std::endl;
217 std::cout <<
"* Compare ViSP and OpenCV moments pixel meter conversion without distortion" << std::endl;
218 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1);
219 unsigned int order = 3;
220 double m00 = 2442, m10 = 414992, m01 = 470311, m11 = 7.99558e+07, m02 = 9.09603e+07, m20 = 7.11158e+07;
223 vpMatrix m1(order, order), m2(order, order);
234 for (
unsigned int i = 0; i < m1.getRows(); i++) {
235 for (
unsigned int j = 0; j < m1.getCols(); j++) {
237 std::cerr <<
"Error in moments pixel meter conversion: visp result for [" << i <<
"][" << j <<
"] ("
239 <<
"differ from OpenCV result (" << m2[i][j] <<
")" << std::endl;
247 std::cout <<
"* Compare ViSP and OpenCV ellipse from circle meter pixel conversion without distortion"
249 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1);
256 double n20_p1, n11_p1, n02_p1, n20_p2, n11_p2, n02_p2;
263 std::cerr <<
"Error in ellipse from circle meter pixel conversion: visp result (" << n20_p1 <<
", " << n11_p1
264 <<
", " << n02_p1 <<
") "
265 <<
"differ from OpenCV result (" << n20_p2 <<
", " << n11_p2 <<
", " << n02_p2 <<
")" << std::endl;
269 std::cerr <<
"Error in ellipse from circle meter pixel conversion: visp result (" << center_p1 <<
") "
270 <<
"differ from OpenCV result (" << center_p2 <<
")" << std::endl;
274 std::cout <<
"* Compare ViSP and OpenCV ellipse from sphere meter pixel conversion without distortion"
285 std::cerr <<
"Error in ellipse from sphere meter pixel conversion: visp result (" << n20_p1 <<
", " << n11_p1
286 <<
", " << n02_p1 <<
") "
287 <<
"differ from OpenCV result (" << n20_p2 <<
", " << n11_p2 <<
", " << n02_p2 <<
")" << std::endl;
291 std::cerr <<
"Error in ellipse from sphere meter pixel conversion: visp result (" << center_p1 <<
") "
292 <<
"differ from OpenCV result (" << center_p2 <<
")" << std::endl;
298 std::cout <<
"Test successful" << std::endl;
302 std::cout <<
"Catch an exception: " << e << std::endl;
Generic class defining intrinsic camera parameters.
void initPersProjWithoutDistortion(double px, double py, double u0, double v0)
void initPersProjWithDistortion(double px, double py, double u0, double v0, double kud, double kdu)
void computeFov(const unsigned int &w, const unsigned int &h)
Class that defines a 3D circle in the object frame and allows forward projection of a 3D circle in th...
void changeFrame(const vpHomogeneousMatrix &noMo, vpColVector &noP) const VP_OVERRIDE
void projection() VP_OVERRIDE
void setWorldCoordinates(const vpColVector &oP) VP_OVERRIDE
error that can be emitted by ViSP classes.
Implementation of an homogeneous matrix and operations on such kind of matrices.
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
static double distance(const vpImagePoint &iP1, const vpImagePoint &iP2)
static double rad(double deg)
static bool equal(double x, double y, double threshold=0.001)
Implementation of a matrix and operations on matrices.
static void convertLine(const vpCameraParameters &cam, const double &rho_m, const double &theta_m, double &rho_p, double &theta_p)
static void convertPoint(const vpCameraParameters &cam, const double &x, const double &y, double &u, double &v)
static void convertEllipse(const vpCameraParameters &cam, const vpSphere &sphere, vpImagePoint ¢er_p, double &n20_p, double &n11_p, double &n02_p)
static void convertMoment(const vpCameraParameters &cam, unsigned int order, const vpMatrix &moment_pixel, vpMatrix &moment_meter)
static void convertLine(const vpCameraParameters &cam, const double &rho_p, const double &theta_p, double &rho_m, double &theta_m)
static void convertPoint(const vpCameraParameters &cam, const double &u, const double &v, double &x, double &y)
Class that defines a 3D sphere in the object frame and allows forward projection of a 3D sphere in th...
void setWorldCoordinates(const vpColVector &oP) VP_OVERRIDE