Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save crackwitz/dca6099bfa5203ca77698ee87c8795a1 to your computer and use it in GitHub Desktop.
Save crackwitz/dca6099bfa5203ca77698ee87c8795a1 to your computer and use it in GitHub Desktop.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "567d2768",
"metadata": {},
"outputs": [],
"source": [
"import cv2 as cv\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"\n",
"# https://stackoverflow.com/questions/70255244/projecting-the-vertices-of-a-tennis-court-from-3d-to-2d-is-not-working\n",
"# https://gist.github.com/crackwitz/dca6099bfa5203ca77698ee87c8795a1"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "19dd2050",
"metadata": {},
"outputs": [],
"source": [
"objp = np.float32([\n",
" [ 0 , 39, 0], # 0\n",
" [ 0 , -39, 0],\n",
" [ 36 , -39, 0],\n",
" [ 36 , 39, 0],\n",
" [ 4.5, 39, 0], # 4\n",
" [ 4.5, -39, 0],\n",
" [ 31.5, -39, 0],\n",
" [ 31.5, 39, 0],\n",
" [ 4.5, 21, 0], # 8\n",
" [ 31.5, 21, 0],\n",
" [ 4.5, -21, 0],\n",
" [ 31.5, -21, 0],\n",
" [ 18 , 21, 0], # 12\n",
" [ 18 , -21, 0],\n",
" [ 0 , 0, 0],\n",
" [ 36 , 0, 0],\n",
"]).reshape((-1, 1, 3))\n",
"\n",
"lines = [\n",
" (0,1), (1,2), (2,3), (3,0), # court\n",
" (4,5), (6,7), # other lines\n",
" (8,9), (10,11),\n",
" (12,13), (14,15)\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "d096fda6",
"metadata": {},
"outputs": [],
"source": [
"width, height = 1920, 1080\n",
"f = 1880\n",
"cx = (width-1)/2\n",
"cy = (height-1)/2\n",
"\n",
"K = np.eye(3)\n",
"K[0,0] = K[1,1] = f\n",
"K[0:2,2] = (cx, cy)\n",
"\n",
"distcoeffs = np.zeros(5)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "515bab90",
"metadata": {},
"outputs": [],
"source": [
"def ProjectPoints(rvec, tvec, objp):\n",
" (projected, jac) = cv.projectPoints(objp, rvec, tvec, K, distcoeffs)\n",
" # ignore the jacobian\n",
" \n",
" projected.shape = (-1, 2)\n",
" # OpenCV will give (-1, 1, 2) and we don't need the useless dimension\n",
" \n",
" fig, ax = plt.subplots(figsize=(16, 9))\n",
" ax.axis('equal')\n",
" ax.set_xlim(0, 1920) # X right\n",
" ax.set_ylim(1080, 0) # Y down\n",
" # Z far\n",
"\n",
" ax.scatter(*zip(*projected))\n",
"\n",
" for u,v in lines:\n",
" p0, p1 = projected[u], projected[v]\n",
" ax.plot([p0[0], p1[0]], [p0[1], p1[1]])\n",
" \n",
" # or one plot() where the line is broken up using None elements\n",
"\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "b520e6d1",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1152x648 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"rvec = np.float32([1,0,0]) * (-75 * np.pi/180)\n",
"tvec = np.float32([-18, 0, 80])\n",
"\n",
"ProjectPoints(rvec, tvec, objp)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7cf6bb96",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment