trap/test_homography.ipynb

384 lines
11 MiB
Plaintext
Raw Normal View History

2023-12-06 10:21:43 +01:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"import cv2\n",
"import numpy as np\n",
"from PIL import Image\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"def render_projection(src, dst):\n",
" x_min = min(dst[:,0])\n",
" if x_min < 0:\n",
" dst[:,0] += x_min * -1\n",
" y_min = min(dst[:,1])\n",
" if y_min < 0:\n",
" dst[:,1] += y_min * -1\n",
"\n",
" dst[:,0] += 1500\n",
" dst[:,1] += 600\n",
"\n",
"\n",
" # print(\"from\", src)\n",
" # print(\"to\", dst)\n",
"\n",
" H, status = cv2.findHomography(src,dst)\n",
" f, axes = plt.subplots(1, 2, figsize=(16,8))\n",
"\n",
" img = cv2.imread(\"../DATASETS/hof/webcam20231103-2.png\")\n",
" img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n",
"\n",
" for i, p in enumerate(src):\n",
" cv2.circle(img, p, 3, (0,255,0), 0)\n",
" cv2.putText(img, str(i), p, cv2.FONT_HERSHEY_COMPLEX, .5, (0,255,0))\n",
"\n",
" # print (H)\n",
" dst = cv2.warpPerspective(img,H,(2500,1920))\n",
" axes[0].imshow(img)\n",
" axes[1].imshow(dst)\n",
" plt.tight_layout()\n",
" plt.show()\n",
" # display(Image.fromarray(img).resize((600,600)), Image.fromarray(dst).resize((600,600)))\n",
" return H"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[-9.48152339e+00, -4.41262523e+00, 5.72501189e+03],\n",
" [-2.48382229e+00, -1.15090711e+01, 2.40552347e+03],\n",
" [-2.93552481e-03, -3.85529529e-03, 1.00000000e+00]])"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"src = np.array([[924, 341],\n",
" [988, 343],\n",
" [908,125],\n",
" [941, 404],])\n",
"\n",
"dst = np.array([[0,0],\n",
"[100,-20],\n",
"[100, -660],\n",
"[0, 120]])\n",
"render_projection(src, dst)"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[ 3.49459075e+00, 4.05377125e+00, -1.35671915e+03],\n",
" [-1.00489965e-01, 9.38453466e+00, -2.10662947e+02],\n",
" [ 4.06457171e-05, 3.32020281e-03, 1.00000000e+00]])"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"src = np.array([[924, 341],\n",
" [988, 343],\n",
" [908,125],\n",
" [941, 404],])\n",
"\n",
"dst = np.array([[0,0],\n",
"[100,0],\n",
"[100, -735],\n",
"[0, 130]])\n",
"\n",
"\n",
"render_projection(src, dst)\n",
"# cv2.imwrite(\"/tmp/test.jpg\", dst)"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[ 2.33165926e-01, 1.67332324e+00, 4.64930556e+02],\n",
" [-9.63282366e-01, 3.68600662e+00, 7.45922527e+02],\n",
" [-6.77381157e-04, 1.34733628e-03, 1.00000000e+00]])"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"src = np.array([[924, 341],\n",
" [988, 343],\n",
" [908,125],\n",
" [941, 404],])\n",
"\n",
"dst = np.array([[0,0],\n",
"[100,0],\n",
"[100, -735],\n",
"[-.8, 130]])\n",
"\n",
"\n",
"render_projection(src, dst)"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[ 1.71375783e+00, 2.33423256e+00, -2.69179279e+02],\n",
" [-4.74127516e-01, 5.72635471e+00, 3.04878642e+02],\n",
" [-2.89572527e-04, 1.97232411e-03, 1.00000000e+00]])"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"src = np.array([[924, 341],\n",
" [988, 343],\n",
" [908,125],\n",
" [941, 404],])\n",
"\n",
"dst = np.array([[2,0],\n",
"[100,0],\n",
"[105, -695],\n",
"[0, 130]])\n",
"\n",
"\n",
"render_projection(src, dst)\n",
"# cv2.imwrite(\"/tmp/test.jpg\", dst)"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"src = np.array([[924, 341],\n",
" [988, 343],\n",
" [908,125],\n",
" [941, 404],])\n",
"\n",
"dst = np.array([[2,0],\n",
"[100,0],\n",
"[105, -695*1.1],\n",
"[0, 130*1.1]])\n",
"\n",
"\n",
"H = render_projection(src, dst)\n",
"np.savetxt(\"../DATASETS/hof/webcam20231103-2-homography.txt\", H, delimiter=\",\")\n",
"# cv2.imwrite(\"/tmp/test.jpg\", dst)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[ 1.71375783e+00, 2.33423256e+00, -2.69179279e+02],\n",
" [-4.74127516e-01, 5.72635471e+00, 3.04878642e+02],\n",
" [-2.89572527e-04, 1.97232411e-03, 1.00000000e+00]])"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"src = np.array([[924, 341],\n",
" [988, 343],\n",
" [908,125],\n",
" [941, 404],])\n",
"\n",
"dst = np.array([[2,0],\n",
"[100,0],\n",
"[105, -695],\n",
"[0, 130]])\n",
"\n",
"\n",
"render_projection(src, dst)\n",
"# cv2.imwrite(\"/tmp/test.jpg\", dst)"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"src = np.array([[924, 341],\n",
" [988, 343],\n",
" [810, 330],\n",
" [620, 325],\n",
" [908,143],\n",
" [1072,616],\n",
" [941, 404],\n",
" \n",
" ])\n",
"\n",
"dst = np.array([[0,0],\n",
"[97,0],\n",
"[-160,-33],\n",
"[-460,-33],\n",
"[105, -500],\n",
"[87, 420],\n",
"[-2, 112]\n",
"])\n",
"\n",
"\n",
"H = render_projection(src, dst)\n",
"np.savetxt(\"../DATASETS/hof/webcam20231103-2-homography.txt\", H, delimiter=\",\")\n",
"# cv2.imwrite(\"/tmp/test.jpg\", dst)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.10.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}