46#include <visp3/core/vpCameraParameters.h>
47#include <visp3/core/vpDebug.h>
48#include <visp3/core/vpMath.h>
49#include <visp3/core/vpMeterPixelConversion.h>
50#include <visp3/core/vpPixelMeterConversion.h>
56 std::cout <<
"* Test operator=()" << std::endl;
61 std::cerr <<
"Issue with vpCameraParameters comparison operator." << std::endl;
67 std::cerr <<
"Issue with vpCameraParameters comparison operator." << std::endl;
71 std::cout <<
"* Test computeFov()" << std::endl;
74 std::cerr <<
"Issue with vpCameraParameters comparison operator." << std::endl;
80 double px, py, u0, v0;
86 double px_dist, py_dist, u0_dist, v0_dist, kud_dist, kdu_dist;
87 px_dist = 1624.824731;
88 py_dist = 1625.263641;
89 u0_dist = 324.0923411;
90 v0_dist = 245.2421388;
91 kud_dist = -0.1741532338;
92 kdu_dist = 0.1771165148;
99 double x1 = 0, y1 = 0;
100 double u2 = 0, v2 = 0;
101 std::cout <<
"* Test point conversion without distortion" << std::endl;
105 std::cerr <<
"Error in point conversion without distortion:\n"
106 <<
"u1 = " << u1 <<
", u2 = " << u2 << std::endl
107 <<
"v1 = " << v1 <<
", v2 = " << v2 << std::endl;
111 std::cout <<
"* Test point conversion with distortion" << std::endl;
115 std::cerr <<
"Error in point conversion without distortion:\n"
116 <<
"u1 = " << u1 <<
", u2 = " << u2 << std::endl
117 <<
"v1 = " << v1 <<
", v2 = " << v2 << std::endl;
121#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_IMGPROC)
123 std::cout <<
"* Compare ViSP and OpenCV point pixel meter conversion without distortion" << std::endl;
124 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1);
125 cv::Mat distCoeffs = cv::Mat::zeros(5, 1, CV_64FC1);
131 std::cerr <<
"Error in point pixel meter conversion: visp result (" << x1 <<
", " << y1 <<
") "
132 <<
"differ from OpenCV result (" << x2 <<
", " << y2 <<
")" << std::endl;
140 std::cerr <<
"Error in point pixel meter conversion: visp result (" << x1 <<
", " << y1 <<
") "
141 <<
"differ from OpenCV result (" << x2 <<
", " << y2 <<
")" << std::endl;
145 std::cout <<
"* Compare ViSP and OpenCV point meter pixel conversion without distortion" << std::endl;
149 std::cerr <<
"Error in point meter pixel conversion: visp result (" << u1 <<
", " << v1 <<
") "
150 <<
"differ from OpenCV result (" << u2 <<
", " << v2 <<
")" << std::endl;
158 std::cerr <<
"Error in point meter pixel conversion: visp result (" << u1 <<
", " << v1 <<
") "
159 <<
"differ from OpenCV result (" << u2 <<
", " << v2 <<
")" << std::endl;
165 std::cout <<
"* Compare ViSP and OpenCV point pixel meter conversion with distortion" << std::endl;
166 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px_dist, 0, u0_dist, 0, py_dist, v0_dist, 0, 0, 1);
167 cv::Mat distCoeffs = cv::Mat::zeros(5, 1, CV_64FC1);
168 distCoeffs.at<
double>(0, 0) = kdu_dist;
174 std::cerr <<
"Error in point conversion: visp result (" << x1 <<
", " << y1 <<
") "
175 <<
"differ from OpenCV result (" << x2 <<
", " << y2 <<
")" << std::endl;
179 std::cout <<
"* Compare ViSP and OpenCV point meter pixel conversion with distortion" << std::endl;
180 distCoeffs.at<
double>(0, 0) = kud_dist;
184 std::cerr <<
"Error in point meter pixel conversion: visp result (" << u1 <<
", " << v1 <<
") "
185 <<
"differ from OpenCV result (" << u2 <<
", " << v2 <<
")" << std::endl;
191 std::cout <<
"* Compare ViSP and OpenCV line pixel meter conversion without distortion" << std::endl;
192 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1);
194 double rho_m1, theta_m1, rho_m2, theta_m2;
199 std::cerr <<
"Error in line pixel meter conversion: visp result (" << rho_m1 <<
", " << theta_m1 <<
") "
200 <<
"differ from OpenCV result (" << rho_m2 <<
", " << theta_m1 <<
")" << std::endl;
204 std::cout <<
"* Compare ViSP and OpenCV line meter pixel conversion without distortion" << std::endl;
205 double rho_p1, theta_p1, rho_p2, theta_p2;
209 std::cerr <<
"Error in line meter pixel conversion: visp result (" << rho_p1 <<
", " << theta_p1 <<
") "
210 <<
"differ from OpenCV result (" << rho_p2 <<
", " << theta_p1 <<
")" << std::endl;
216 std::cout <<
"* Compare ViSP and OpenCV moments pixel meter conversion without distortion" << std::endl;
217 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1);
218 unsigned int order = 3;
219 double m00 = 2442, m10 = 414992, m01 = 470311, m11 = 7.99558e+07, m02 = 9.09603e+07, m20 = 7.11158e+07;
222 vpMatrix m1(order, order), m2(order, order);
233 for (
unsigned int i = 0; i < m1.getRows(); i++) {
234 for (
unsigned int j = 0; j < m1.getCols(); j++) {
236 std::cerr <<
"Error in moments pixel meter conversion: visp result for [" << i <<
"][" << j <<
"] ("
238 <<
"differ from OpenCV result (" << m2[i][j] <<
")" << std::endl;
246 std::cout <<
"* Compare ViSP and OpenCV ellipse from circle meter pixel conversion without distortion"
248 cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1);
255 double n20_p1, n11_p1, n02_p1, n20_p2, n11_p2, n02_p2;
262 std::cerr <<
"Error in ellipse from circle meter pixel conversion: visp result (" << n20_p1 <<
", " << n11_p1
263 <<
", " << n02_p1 <<
") "
264 <<
"differ from OpenCV result (" << n20_p2 <<
", " << n11_p2 <<
", " << n02_p2 <<
")" << std::endl;
268 std::cerr <<
"Error in ellipse from circle meter pixel conversion: visp result (" << center_p1 <<
") "
269 <<
"differ from OpenCV result (" << center_p2 <<
")" << std::endl;
273 std::cout <<
"* Compare ViSP and OpenCV ellipse from sphere meter pixel conversion without distortion"
284 std::cerr <<
"Error in ellipse from sphere meter pixel conversion: visp result (" << n20_p1 <<
", " << n11_p1
285 <<
", " << n02_p1 <<
") "
286 <<
"differ from OpenCV result (" << n20_p2 <<
", " << n11_p2 <<
", " << n02_p2 <<
")" << std::endl;
290 std::cerr <<
"Error in ellipse from sphere meter pixel conversion: visp result (" << center_p1 <<
") "
291 <<
"differ from OpenCV result (" << center_p2 <<
")" << std::endl;
297 std::cout <<
"Test successful" << std::endl;
300 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
void setWorldCoordinates(const vpColVector &oP)
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)