Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Drawing 3D points on a distorted image

I have the intrinsic parameters of my camera (camera matrix and distortion parameters). I also have a 3D point in the camera coordinate frame. I'd like to project that point onto the image, and show the result.

The distortion parameters seemed to be used in two places:

  1. When calling undistort(), which provides me with an undistorted image;
  2. When calling projectPoints(), which transforms my 3D point into a 2D point on the image.

I then add a cv::circle to the image with the resulting 2D point and imshow() the resulting image.

My question is this: Calling undistort() results in a cropped image, so do the resulting points from projectPoints() give pixel coordinates in the original distorted image, or are the pixel coordinates in the undistorted image? Put differently, should I call undistort() before drawing the point on my image if I want the point to be drawn in the right spot? Does undistorting the image before drawing on it compensate for the distortion twice?