Calculating positions of objects as (x,y) on a known platform (opencv-python)

I have a platform which I know the sizes. I would like to get the positions of objects placed on it as (x,y) while looking through the webcam, the origin being the top-left corner of the platform. However, I can only look through from a low angle: example

I detect the objects using the otsu threshold. I want to use the bottom edge of the bounding rectangles, then proportion it accordingly concerning the corners (the best I can think of), but I don’t know how to implement it. I tried warp perspective but it enlarges the objects too much. image with threshold // attempt of warp perspective

Any help or suggestion would be appreciated.


Don’t use warp perspective to transform the image to make the table cover the complete image as you did here.

While performing perspective transformations in image processing, try not to transform the image too much.

Below is the image with your table marked with red trapezium that you transformed.
initial trapezium

Now try to transform it into a perfect rectangle but you do not want to transform it too much as you did. One way is to transform the trapezium to a rectangle by simply adjusting the shorter edge’s vertices to come directly above the lower edge’s vertices as shown in the image below with green.

This way, things far from the camera will be skewed wrt width only a little. This will give better results. Another even better way would be to decrease the size of the lower edge a little and increase the size of the upper edge a little. This will evenly skew objects kept over the table as shown below.

Now, as you know the real dimensions of the table and the dimensions of the rectangle in the image, you can do the mapping. Using this, you can determine the exact position of the objects kept on the table.