Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Fit a cylinder given a set of points and a easy visualization for 3d axis

Hi I have set of points that approximate a cylinder (from a feature detection)

 std::vector<cv::Point3f> objectPoints;

and I would like to know how I can get the representation in space of this cylinder.

What I really like is the projection of the vector of the axes in simulated 3D like this:

I have vertices of a generic three-dimensional space:

        std::vector<cv::Point3f> verts(4);
        verts[0] = cvPoint3D32f(0, 0, 0);
        verts[1] = cvPoint3D32f(0, 1, 0);
        verts[2] = cvPoint3D32f(1, 0, 0);
        verts[3] = cvPoint3D32f(0, 0, 1);

and edges connecting the verts

        std::vector<cv::Point2d> edges(3);
        edges[0] = cvPoint2D32f(0, 1);
        edges[1] = cvPoint2D32f(0, 2);
        edges[2] = cvPoint2D32f(0, 3);

  cv::projectPoints(verts, rvec, tvec, cameraMatrix, distCoeffs, projectedVertPoints);

  for (int i = 0; i<edges.size(); i++) {

            cv::Point2d vertA,vertB;
            vertA = projectedVertPoints[edges[i].x];
            vertB = projectedVertPoints[edges[i].y];
     // Here you can play with the colors and give each axis its classic color, red green and blue
            cv::line(src, vertA, vertB,cv::Scalar(0,255,255));

        }

I took inspiration from the demo project in python plane_ar.py