Skip to content

Instantly share code, notes, and snippets.

@CMCDragonkai
Last active March 21, 2018 01:58
Show Gist options
  • Save CMCDragonkai/9772fb48c1e312f1cf13c4b69c23d732 to your computer and use it in GitHub Desktop.
Save CMCDragonkai/9772fb48c1e312f1cf13c4b69c23d732 to your computer and use it in GitHub Desktop.
Draw shapes and masks #python #opencv
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb53b9e84e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"import numpy as np\n",
"import cv2 # cv2 must be imported after numpy or we get segmentation fault\n",
"import matplotlib.pyplot as plt\n",
"import contextlib\n",
"\n",
"\n",
"def draw_shape_and_masks():\n",
" height = 128\n",
" width = 128\n",
" padding = 20\n",
" count = 4\n",
"\n",
" bg_colour = np.array([np.random.randint(0, 255) for _ in range(3)])\n",
" image = np.tile(np.array(bg_colour, dtype=np.uint8), (height, width, 1))\n",
" masks = np.zeros([height, width, count], dtype=np.uint8)\n",
"\n",
" for i in range(count):\n",
" shape_color = tuple([np.random.randint(0, 255) for _ in range(3)])\n",
" shape_y = np.random.randint(padding, height - padding - 1)\n",
" shape_x = np.random.randint(padding, width - padding - 1)\n",
" shape_size = np.random.randint(padding, height // 4)\n",
"\n",
" cv2.rectangle(\n",
" image, (shape_x - shape_size, shape_y - shape_size),\n",
" (shape_x + shape_size, shape_y + shape_size),\n",
" shape_color,\n",
" thickness=-1)\n",
"\n",
" # bug in opencv requiring copy of the numpy array\n",
" # for some reason opencv cannot handle numpy slices\n",
" masks[:, :, i] = cv2.rectangle(\n",
" masks[:, :, i].copy(), (shape_x - shape_size,\n",
" shape_y - shape_size),\n",
" (shape_x + shape_size, shape_y + shape_size),\n",
" 1,\n",
" thickness=-1)\n",
"\n",
" return (image, masks)\n",
"\n",
"\n",
"@contextlib.contextmanager\n",
"def figure(*args, **kwargs):\n",
" fig = plt.figure(*args, **kwargs)\n",
" yield fig\n",
" plt.close(fig)\n",
"\n",
"\n",
"(image, masks) = draw_shape_and_masks()\n",
"\n",
"with figure() as fig:\n",
"\n",
" for i in range(5):\n",
" fig.add_subplot(3, 2, i + 1)\n",
"\n",
" fig.axes[0].imshow(image)\n",
" fig.axes[1].imshow(masks[:, :, 0])\n",
" fig.axes[2].imshow(masks[:, :, 1])\n",
" fig.axes[3].imshow(masks[:, :, 2])\n",
" fig.axes[4].imshow(masks[:, :, 3])\n",
" \n",
" plt.show()"
]
}
],
"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.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment