I am sure some people are hitting their heads trying to solve this simple problem when doing augmented reality with OpenCV and OpenGL:

How to get the proper OpenGL projection matrix from the OpenCV camera calibration values?

For the simple common case where the OpenCV camera matrix has the form:

```
|fx 0 cx|
|0 fy cy|
|0 0 1|
```

The corresponding OpenGL projection matrix can be computed like this:

```
m[0][0] = 2.0 * fx / width;
m[0][1] = 0.0;
m[0][2] = 0.0;
m[0][3] = 0.0;
m[1][0] = 0.0;
m[1][1] = -2.0 * fy / height;
m[1][2] = 0.0;
m[1][3] = 0.0;
m[2][0] = 1.0 - 2.0 * cx / width;
m[2][1] = 2.0 * cy / height - 1.0;
m[2][2] = (zfar + znear) / (znear - zfar);
m[2][3] = -1.0;
m[3][0] = 0.0;
m[3][1] = 0.0;
m[3][2] = 2.0 * zfar * znear / (znear - zfar);
m[3][3] = 0.0;
```

Where `height`

and `width`

are the size of the captured image ; `znear`

and
`zfar`

are the clipping value for the projection.

It took me a lot of time to get it right, since we have to be careful of the difference in referential between OpenGL and OpenCV.