wk-labs/lab1.ipynb

184 lines
225 KiB
Plaintext
Raw Normal View History

2021-11-23 21:40:19 +01:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "68fefbf7",
"metadata": {},
"outputs": [],
"source": [
"import cv2 as cv"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "71f3308b",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "e20e0e2c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7fd039dc0670>"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAANcAAAD8CAYAAADkFjFAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOz9d5hlV3XnjX/2PvnGupWrc1S31MoRhCQEQoEgENhgwIkxGBzGNvbwjj1+/c6843Gascfj8XgcwMYYG9sEY8CAiYogUM5S59xdXbnqxpP23r8/9rm3qoUQzGszI/8ebT2tqrrhhH322mut71rru4QxhhfHi+PF8c8/5P/pC3hxvDj+/3W8KFwvjhfH92i8KFwvjhfH92i8KFwvjhfH92i8KFwvjhfH92i8KFwvjhfH92h8z4RLCHGLEGKfEOKgEOKXvlfneXG8OF6oQ3wv4lxCCAfYD9wInAQeAN5mjHn6n/1kL44Xxwt0fK8015XAQWPMYWNMCvwt8Ibv0bleHC+OF+Rwv0fHXQ+cWPP3SeCqb/fhMPBMpRQCBuk4eL6P63p4jsEVilMzy9TKEeWSQ7USkKUZuYaF5QRtJAgBQBS4CGH/NAaMMRhj0MZgtEFpbU9owHUclFKoXOG6DmAG31FKIxAIKex3hUBIiRCgtcZ1ncGxhRBoA3GcUYoCHGkQRuO69vPlckAYrk6zEIK4m7G00CEsRRgMurgure0xpYBaPcBxBQbQCprNGKVBKUPoe/hS4LgOojiuVgotBO0ktddsQAiJUhrXEYS+vZ4gcCiXg8H15LlGAI4rwIBWhm43La4VHOmgDeRKk+YapTSNmo/rCDAKow2OI0BoO+mDGx38D76NcZTnhjSDVkcTxxp0cS2eZGikgnz21i/ssYzRGMyaA4uzPqY1ZDnMzHXIczsPriMRQmKMxvMkaZag8hwpJUprHEdSK3tMTlSYX4yJyg176caQZTlxr4vWCiEEfWvPAAsLK/PGmLHnur/vlXCJ53jtrCkWQrwbeDdAOQp4zXUXIB2JH5WYXL+RyXWTjFRhc73D733wi0yODHPFnhpvftMlzJ04w3JX8Km75piOh6iNr0OkTdxkhvmZWYTj0mzH5MXDsotNIITk6st3sXFjg6XFNtMnFzhx8AzDjRpBGOAHIVGpivDLjI2Osm79BLWROpWhKn4YIaTk4IGnePD+u1hYaLPS6iIdF+OEPLPvJJs3TLB1skzem2dsuEy55LBnzzgXXbIBKQRSShzpcPpom09+8H6uuukl9OIuBw+dot3qoo3C8z08qXj59VuZmArRQJzA5754kIWVnJV2xtbJcbZ4mnXbNpE0u2idI/KcTuBx5zMH6SSKLFVEYYnFZkItcrjonCq+l7NuQ51rrt2FMBq0AZ3b1QigDb2O4tEHj5LlhiD0qFRKZArOLHY4PRMzM9vira/dzuiQwNc9PKFA5gg3AZMijLCP35EYu0WBkatPv78wjWBuNmVuSfL1fQ5z+VbimSUOP/QgUxvLvOkdLyGIDLp/ncX3NIpMpSBAOhIhBBK74I0wKCXp9DL2H4z56N8dw1DDFT4SSZLkpFnMhq0l5ueOcebkSaJ6jaBUohSF3PKSMX7sX13Ah//2EOdfeRsYQ68XMz+/wOMP30ccd5FSkuU5SZaSZRmf/NTXjn07IfheCddJYOOavzcAp9d+wBjzfuD9AGPDVeN5DirX5GlGmiSoXJEpDyVcdm6Z5Klnptm5uUySahxXEvqwYf0YJ4/CwQP7mRypUFExL71yN37g8s2HDjI920RKQTmMCPyAMCwzPrGOyclJNm4M2XGOwb+5RH1oiEqtRhCW8AIX6RjSJGal2aS5ssLR48c4PT1Du9XhNbfczKkjB4hbh0l9jzhX+J6kWqlghMQLI9JuTq5zDC69Xmp3W2FAgDKKIHTAJASBpJfmBKFDa0njei5CGKR0yZXBdV27SwYSP/DQxiClIQOiWhWV5yiVUxqqIfKMOM1wPA8nFxhHFDucJEkNCAchtdWOUlohMGp1GxSAFLi+z/iWc9FuHSEyuvNHSPMeWZ6S54pekpPmCq0cu5h1jsljPKkLA8KAssIghABprQIQZ2s2IzAI/NBjZnGeLz2wlz3n7qG2fhLt9ugmMcoxCCGRaKQBKVbvyaDRxgwUpDYaYyBXOVmuWV7KGRueYnlFE3cVRhm0cTE6YGEmwa/U2bi7guv7BJ5HJQyYmqqTqxwpXRys1YIxmDwnz3N7P4AjJaUghCB8XiH4XgnXA8BOIcRW4BTwVuDtz/cF6YDSBmMUKlNopci1R5q5nLNlHbd/fS9xCstLPSphSDfuMjISEi2VGPar1GoOYadHpewhHck117wUJaoMDzVoNIaplCtEUYmo5CEcg1KKJE1otzssLa9w4PgRpqfnmD6zwNzsPIsLTeaX2nR7MVmuCvNJs+uc8wmCCrmyJmKeZVRqHvWhGgaBG4TWlNI5CEGcaMBBSruwhBCEFYewLHFde99pmuKEPmHgo5U1yeJEIZ1C2DwX3/fIVEquBd1eCu4QcauDIwTGKIzW+I7A912SDIwWKK0R2lhzTlt7WSltBVZSLPbCrC7sTyMMmUqI0xZR6GGQGEBKFyk1mdJoDIhVMxoALcBxi2Nq0H1zvbDThWPPKRwATA6uVAgpSTJFp5vy4KNPcd65u4mGauQGPA1gzd0gLONKl6S3gjYABqHtfKq+oAlQSiGEy6njCcvzmm4sSXODIxysUDoIaRgeqaJEMrj+ROUkWY88z/G8sr0lbTWn0gqtFZ7nDQRMaz0w57/d+J4IlzEmF0L8a+CLgAN80Bjz1Lf9grC7kiwehspy8jRD6YiekkxNVsmBTgIzZ1YY2lbHoFk/UeKS+kUcm+4isyaqdwpjDNX6FLsuuBYloNvt0W42OXHiGLPz88zMLjAzt8D0zBLNZo92p0eapGS5QitjbXljrMVUPERj+paJYWm5TViq0Wz38FwPTxkk0Gm36HQTdm8fx3MDPNdDOgFpbndoKUXficEvOfhRQJ7lhFGJ5lIbPyzb+3c8enFCq5UhpQtopJC4nqSbKOIsp9lOkFFAfaxK3uyik4x4cRl3pI7nuQiRW1kxGoEhTlNyrZBSDqxAR9p5R0gY+C8Cx5GUq1VkEpCnbZQBx4sIfPB8MAgUIThllBQYI5HSRQchyAAjfIRqIrtPgemBNghH2vNID9wAXIk0UPci9KIgCFbw/Yg4Uxw6cQKlKhjGrJbF4DoebljFGEMed9Amx2jQFCahEOhC4/ue1U7LS3O4soIrDUiJMQ65lhgBeZagtUJ6q06d6ziUSg5JrJDSK4TOgBEopez8aWva9/3t74S0f680F8aYzwOf/24+Kwa7GxijSLOUXpJSzg1JLhitlhhrVJhvxZw602TPzlGkNAQ6xpcx23dtYffW9dz1yaP0soT15Rozcwv83h/8OTPzTZI4I01TjLY7nKHYYE2xwoTBioDdkUqlEkmSglKce975tFaW2XXOOdx+x+0sLTfZtmmYZjNmdLSKQWOMphRGtNsp2ri4fgXpSlzPQ2mB1gLX9TBCgGMXRG2oTK+T4FZ8lDZ4rsB1BL3EkGSKdiez3zEKpEO9VsFx2oAiyTLylR5zJ2Yw3YS810M4gnq9hu/7GBNbsMUIpCPIVW4BDqS1DpBWgwgfpIPRAnAwjsQYF6MFAg+/NExpaAeuEzBhBDuMxzU3SIYbVRzPAyRGSBQOeYEkGaNw0pN4veM4gCg0BsKxms13QVqt5gY+kZLUqzWG6gntOKFer9No1BBOgGtPgSMkWdwjVxnKQKYdOtkYPVXBj2qUS8NE1QbC9RHSI11MaHXnMdrFcwQqN+TKIyytQ+BhsjMIs4TvxwSBjx8EBL7LSD2n28uRXjAQHqU0WZZZVEl4dr2uATWeb3zPhOv/yzDaIntJEhP3EjJl6OUOQnhs3TjG/EKH2YUSqSrsYd2ht3iYb9z1KPrlV6OFR6/bIo47BPWAU6eXabZihDQDBFEIh/UTkywsLHDJJZcyMTFOFPnMzMwwOjrK33z0Y7z1rW/hzPQp7rjr67zvvT/JJz7xUd7+trf
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"image = cv.imread(\"../img/soyjaks.jpg\", cv.IMREAD_COLOR)\n",
"image2 = cv.cvtColor(image, cv.COLOR_BGR2RGB)\n",
"cv.putText(image2, 'OMG not chickenz!', (30,80), cv.FONT_HERSHEY_PLAIN, 3.5, (255,0,0), 8, cv.LINE_AA)\n",
"cv.circle(image2, (330,225), 60, (255,0,255), 15)\n",
"plt.imshow(image2)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "7404e4ba",
"metadata": {},
"outputs": [],
"source": [
"def overlay_transparent(background, overlay, x, y):\n",
"\n",
" background_width = background.shape[1]\n",
" background_height = background.shape[0]\n",
"\n",
" if x >= background_width or y >= background_height:\n",
" return background\n",
"\n",
" h, w = overlay.shape[0], overlay.shape[1]\n",
"\n",
" if x + w > background_width:\n",
" w = background_width - x\n",
" overlay = overlay[:, :w]\n",
"\n",
" if y + h > background_height:\n",
" h = background_height - y\n",
" overlay = overlay[:h]\n",
"\n",
" if overlay.shape[2] < 4:\n",
" overlay = np.concatenate(\n",
" [\n",
" overlay,\n",
" np.ones((overlay.shape[0], overlay.shape[1], 1), dtype = overlay.dtype) * 255\n",
" ],\n",
" axis = 2,\n",
" )\n",
"\n",
" overlay_image = overlay[..., :3]\n",
" mask = overlay[..., 3:] / 255.0\n",
"\n",
" background[y:y+h, x:x+w] = (1.0 - mask) * background[y:y+h, x:x+w] + mask * overlay_image\n",
"\n",
" return background\n"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "c6d8969e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7ff040b83970>"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pipe = cv.imread(\"../img/pipe.png\", cv.IMREAD_UNCHANGED)\n",
"pipe = cv.flip(pipe, 1)\n",
"pipe = cv.resize(pipe, None, fx=0.55, fy=0.55, interpolation=cv.INTER_CUBIC)\n",
"\n",
"man = cv.imread(\"../img/man-without-pipe.png\", cv.IMREAD_UNCHANGED)\n",
"\n",
"final = overlay_transparent(man, pipe, 70, 280)\n",
"\n",
"plt.imshow(cv.cvtColor(final, cv.COLOR_BGR2RGB))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "27455325",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "435cceb1",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}