Francesco gave a very sensible answer. However, if you don't have the camera intrinsics (focal length, principal point etc.) for the 'perspective view', you need to estimate them.
Because your images are of a regular checkerboard, you can do this using OpenCV's camera calibration methods with automatic checkerboard detection. See opencv_source_code/samples/cpp/calibration.cpp for a nice demonstration.
In the calibration example, you can use the -o flag to specify that you want to output the camera extrinsic matrices (i.e. the rotation R and translation t that transforms the planar target to the perspective view). The angle between the two planes in the Normal and Perspective view is simply acos(R22), where R22 is the bottom right element in R.
One important point about calibration. If you have more than one perspective view from different angles, and you are sure that the camera intrinsics are constant for all views, then you can do a normal calibration of the complete intrinsic matrix, as is done in the calibration example.
However, if you only have one perspective view, this is not possible, and you have to use a simplified camera intrinsic matrix. Normally you would do this by only calibrating the camera's focal length. To do this you need to pass calibrateCamera
a cameraMatrix K with K = [0,0,px;0,0,py;0,0,1] where px is half the image width, and py is half the image height (of the perspective view). You also pass calibrateCamera
a distortion matrix of size 3x1 with all elements zero. Finally, you need to ensure only the focal length is estimated in the call to calibrateCamera
by setting the following flags: CALIB_FIX_ASPECT_RATIO, CALIB_FIX_PRINCIPAL_POINT, CALIB_ZERO_TANGENT_DIST, CALIB_FIX_K1,CALIB_FIX_K2,CALIB_FIX_K3.