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:
- When calling undistort(), which provides me with an undistorted image;
- 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?