{"id":2192,"date":"2020-04-18T16:06:16","date_gmt":"2020-04-18T14:06:16","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?p=2192"},"modified":"2024-06-09T16:58:16","modified_gmt":"2024-06-09T14:58:16","slug":"les-images-et-python","status":"publish","type":"post","link":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/","title":{"rendered":"Les images et Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Dans cet article, j&rsquo;ai envie de vous parler d&rsquo;images, et plus particuli\u00e8rement de manipulation d&rsquo;images avec Python.<\/p>\n\n\n\n<!--more-->\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Au menu sur cette page...<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#Le_module_PIL\" >Le module PIL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#Chargement_dune_image\" >Chargement d&rsquo;une image<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#La_valeur_dun_pixel\" >La valeur d&rsquo;un pixel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#Flou_gaussien\" >Flou gaussien<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Le_module_PIL\"><\/span>Le module PIL<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour manipuler des images, j&rsquo;ai l&rsquo;habitude d&rsquo;utiliser PIL. On peut l&rsquo;installer en ligne de commande en tapant par exemple (si on utilise pip):<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install pillow<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En plus de PIL, j&rsquo;utilise le module <em>numpy<\/em>&#8230; et vous allez vite savoir pourquoi!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chargement_dune_image\"><\/span>Chargement d&rsquo;une image<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour la suite, je vais prendre l&rsquo;image suivante, nomm\u00e9e tout simplement \u00ab\u00a0image.jpg\u00a0\u00bb:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg\" rel=\"i\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg\" alt=\"\" class=\"wp-image-2196\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg 1024w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-300x76.jpg 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-600x153.jpg 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-768x195.jpg 768w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1536x391.jpg 1536w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est une magnifique photo du Pont de pierre, \u00e0 Bordeaux, sur lequel passe le tramway.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour la charger, j&rsquo;utilise le code:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from PIL import Image\nimport numpy as np\nimgpil = Image.open(\"image.jpg\")  \nimg = np.array(imgpil) # Transformation de l'image en tableau numpy<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour en d\u00e9terminer les dimensions, je tape:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">print(img.shape)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La m\u00e9thode <em>shape<\/em> appliqu\u00e9e \u00e0 une image renvoie un triplet (ou un quadruplet) correspondant :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>nombre de lignes (en pixel)<\/li>\n\n\n\n<li>nombre de colonnes (en pixel)<\/li>\n\n\n\n<li>nombre de plans<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">En g\u00e9n\u00e9ral, il n&rsquo;y a que trois plans (correspondant aux trois couleurs primaires: rouge, vert et bleu), mais quelques fois, il y en a quatre. Ce dernier correspond \u00e0 la transparence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur mon image, Python me renvoie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(509, 2000, 3)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cela signifie que les dimensions de mon image sont 509 \u00d7 2000 [hauteur\u00d7largeur], et qu&rsquo;il n&rsquo;y a que trois plans.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"La_valeur_dun_pixel\"><\/span>La valeur d&rsquo;un pixel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour conna\u00eetre la valeur d&rsquo;un pixel, on utilise le tableau repr\u00e9sentant l&rsquo;image et on demande tout simplement d&rsquo;afficher la valeur du pixel en informant les coordonn\u00e9es de ce dernier. Par exemple, pour afficher le valeur du pixel qui est en ligne 100 et en colonne 200, j&rsquo;\u00e9cris:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">print(img[200,100])<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">qui me renvoie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;63 55 42]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">qui correspond au triplet (R, V, B), o\u00f9 R, V et B sont compris entre 0 et 255.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour modifier la valeur de ce pixel, il suffit donc de changer sa valeur:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">img[200,100] = (125,30,255)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On peut ainsi cr\u00e9er des fonctions \u00ab\u00a0filtres\u00a0\u00bb :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def filtre_rouge(img_orig):\n    im = np.copy(img_orig) # On fait une copie de l'original\n    for i in range(im.shape[0]):\n        for j in range(im.shape[1]):\n            r, v, b = im[i, j]\n            im[i, j] = (r, 0,0)\n    return im\n\ndef filtre_bleu(img_orig):\n    im = np.copy(img_orig) # On fait une copie de l'original\n    for i in range(im.shape[0]):\n        for j in range(im.shape[1]):\n            r, v, b = im[i, j]\n            im[i, j] = (0, 0,b)\n    return im\n\ndef filtre_vert(img_orig):\n    im = np.copy(img_orig) # On fait une copie de l'original\n    for i in range(im.shape[0]):\n        for j in range(im.shape[1]):\n            r, v, b = im[i, j]\n            im[i, j] = (0, v,0)\n    return im\n\nimgpil = Image.fromarray(filtre_rouge(img)) # Transformation du tableau en image PIL\nimgpil.save(\"resultat_rouge.jpg\")\n\nimgpil = Image.fromarray(filtre_bleu(img)) # Transformation du tableau en image PIL\nimgpil.save(\"resultat_bleu.jpg\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cela cr\u00e9e et enregistre les trois images suivantes:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_rouge-1024x261.jpg\" rel=\"i\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_rouge-1024x261.jpg\" alt=\"\" class=\"wp-image-2198\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_rouge-1024x261.jpg 1024w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_rouge-300x76.jpg 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_rouge-600x153.jpg 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_rouge-768x195.jpg 768w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_rouge-1536x391.jpg 1536w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_rouge.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_vert-1024x261.jpg\" rel=\"i\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_vert-1024x261.jpg\" alt=\"\" class=\"wp-image-2199\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_vert-1024x261.jpg 1024w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_vert-300x76.jpg 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_vert-600x153.jpg 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_vert-768x195.jpg 768w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_vert-1536x391.jpg 1536w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_vert.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_bleu-1024x261.jpg\" rel=\"i\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_bleu-1024x261.jpg\" alt=\"\" class=\"wp-image-2197\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_bleu-1024x261.jpg 1024w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_bleu-300x76.jpg 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_bleu-600x153.jpg 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_bleu-768x195.jpg 768w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_bleu-1536x391.jpg 1536w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_bleu.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Avec ce filtre:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def filtre(img_orig):\n    im = np.copy(img_orig) # On fait une copie de l'original\n    for i in range(im.shape[0]):\n        for j in range(im.shape[1]):\n            r, v, b = im[i, j]\n            im[i, j] = (99-r, 99-v,99-b)\n    return im<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">on obtient:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat-1024x261.jpg\" rel=\"i\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat-1024x261.jpg\" alt=\"\" class=\"wp-image-2202\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat-1024x261.jpg 1024w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat-300x76.jpg 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat-600x153.jpg 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat-768x195.jpg 768w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat-1536x391.jpg 1536w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Flou_gaussien\"><\/span>Flou gaussien<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le flou gaussien est un peu compliqu\u00e9 \u00e0 obtenir, et quand bien m\u00eame on dispose d&rsquo;un script, il est tr\u00e8s (tr\u00e8s tr\u00e8s tr\u00e8s) long \u00e0 donner un r\u00e9sultat. Voici le script que j&rsquo;utilise:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def gaussKernel(r,sigma):\n    kernel = [[0] * (2*r+1) for _ in range(2*r + 1)]\n    if sigma > 0:\n        gaussianKernelFactor, e = 0, 0\n        for ky in range(-r,r):\n            for kx in range(-r,r):\n                e = exp(-(kx**2+ky**2)\/(2*pi*sigma**2))\n                gaussianKernelFactor += e\n                kernel[kx+r][ky+r] = e\n        \n        for ky in range(-r,r):\n            for kx in range(-r,r):\n                kernel[kx+r][ky+r] = kernel[kx+r][ky+r] \/ gaussianKernelFactor\n                \n    return kernel\n                \ndef convolution(img,M):\n    px = int( (len(M)-1) \/ 2 )\n    im = img.copy()\n    imax = img.shape[1] - px\n    for i in range(px,imax):\n        for j in range(px,img.shape[0]-px):\n            somme = 0.0\n            for k in range(-px,px+1):\n                for l in range(-px,px+1):\n                    somme += img[j+l][i+k] * M[l+px][k+px]\n            im[j][i] = somme\n    return im\n\nimgpil = Image.open(\"image.jpg\")  \nimg = np.array(imgpil) \nH = gaussKernel(3,10)\nimgpil = Image.fromarray(convolution(img,H))\nimgpil.save(\"resultat_flou.jpg\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On d\u00e9finit d&rsquo;abord le noyau de convolution (<em>gaussKernel<\/em>) en fonction du rayon de flou que l&rsquo;on souhaite et d&rsquo;une valeur <em>sigma<\/em>, qui intervient dans les calculs. C&rsquo;est une matrice carr\u00e9e. Ensuite, on d\u00e9finit la convolution bas\u00e9e sur cette matrice qui donnera le flou gaussien. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai voulu mettre le paquet et ai pris un rayon \u00e9gal \u00e0 7 (je suis un dingue moi! Faut pas me chercher !&#8230;), et un sigma de 0.8 (pourquoi pas ?)&#8230; mais je n&rsquo;aurais jamais d\u00fb faire \u00e7a ! En effet, le programme met&#8230; 20 minutes \u00e0 cr\u00e9er l&rsquo;image pas tr\u00e8s flout\u00e9e au final! Je change donc mon rayon en 3 et sigma en 10, je lance le script \u00e0 19:47 et \u00e0 19:53, le r\u00e9sultat tombe:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_flou-1024x261.jpg\" rel=\"i\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_flou-1024x261.jpg\" alt=\"\" class=\"wp-image-2206\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_flou-1024x261.jpg 1024w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_flou-300x76.jpg 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_flou-600x153.jpg 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_flou-768x195.jpg 768w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_flou-1536x391.jpg 1536w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/resultat_flou.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">6 minutes pour un flou tr\u00e8s l\u00e9ger&#8230; Ce n&rsquo;est pas tr\u00e8s rentable!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe cependant une autre m\u00e9thode, bien plus rapide ! Utiliser un filtre de PIL :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from PIL import Image\nfrom PIL import ImageFilter\nfrom PIL.ImageFilter import (\n    GaussianBlur\n    )\nsimg = Image.open('image.jpg')\n\n# defaut: radius=2\ndimg = simg.filter(GaussianBlur(radius=10))\ndimg.save(\"image_floue.jpg\")\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">qui produit l&rsquo;image suivante:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image_floue-1024x261.jpg\" rel=\"i\" data-fancybox=\"gallery\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"261\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image_floue-1024x261.jpg\" alt=\"\" class=\"wp-image-2207\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image_floue-1024x261.jpg 1024w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image_floue-300x76.jpg 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image_floue-600x153.jpg 600w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image_floue-768x195.jpg 768w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image_floue-1536x391.jpg 1536w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image_floue.jpg 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Et tout ceci en&#8230; moins de 2 secondes !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez ci-dessous un ZIP contenant les images et deux scripts r\u00e9unissant tous les filtres.<\/p>\n\n\n\n<div class=\"wp-block-file aligncenter um_article\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/Image-python-filtres.zip\">Image-python-filtres<\/a><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/Image-python-filtres.zip\" class=\"wp-block-file__button wp-element-button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article, j&rsquo;ai envie de vous parler d&rsquo;images, et plus particuli\u00e8rement de manipulation d&rsquo;images avec Python.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[202,197,201,200,196,198,199],"class_list":["post-2192","post","type-post","status-publish","format-standard","hentry","category-python","tag-convolution","tag-filtre","tag-flou","tag-gaussien","tag-image","tag-pil","tag-pillow"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Les images et Python - Mathweb.fr<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Les images et Python - Mathweb.fr\" \/>\n<meta property=\"og:description\" content=\"Dans cet article, j&rsquo;ai envie de vous parler d&rsquo;images, et plus particuli\u00e8rement de manipulation d&rsquo;images avec Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-18T14:06:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-09T14:58:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg\" \/>\n<meta name=\"author\" content=\"St\u00e9phane Pasquet\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"St\u00e9phane Pasquet\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/\"},\"author\":{\"name\":\"St\u00e9phane Pasquet\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"headline\":\"Les images et Python\",\"datePublished\":\"2020-04-18T14:06:16+00:00\",\"dateModified\":\"2024-06-09T14:58:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/\"},\"wordCount\":543,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/image-1024x261.jpg\",\"keywords\":[\"convolution\",\"filtre\",\"flou\",\"gaussien\",\"image\",\"PIL\",\"pillow\"],\"articleSection\":[\"Python\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/\",\"name\":\"Les images et Python - Mathweb.fr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/image-1024x261.jpg\",\"datePublished\":\"2020-04-18T14:06:16+00:00\",\"dateModified\":\"2024-06-09T14:58:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/image-1024x261.jpg\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/image-1024x261.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/04\\\/18\\\/les-images-et-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Les images et Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\",\"name\":\"Mathweb.fr\",\"description\":\"Math\u00e9matiques, LaTeX et Python\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\",\"name\":\"St\u00e9phane Pasquet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"width\":74,\"height\":77,\"caption\":\"St\u00e9phane Pasquet\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Les images et Python - Mathweb.fr","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Les images et Python - Mathweb.fr","og_description":"Dans cet article, j&rsquo;ai envie de vous parler d&rsquo;images, et plus particuli\u00e8rement de manipulation d&rsquo;images avec Python.","og_url":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/","og_site_name":"Mathweb.fr","article_published_time":"2020-04-18T14:06:16+00:00","article_modified_time":"2024-06-09T14:58:16+00:00","og_image":[{"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg","type":"","width":"","height":""}],"author":"St\u00e9phane Pasquet","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"St\u00e9phane Pasquet","Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#article","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/"},"author":{"name":"St\u00e9phane Pasquet","@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"headline":"Les images et Python","datePublished":"2020-04-18T14:06:16+00:00","dateModified":"2024-06-09T14:58:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/"},"wordCount":543,"commentCount":3,"publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg","keywords":["convolution","filtre","flou","gaussien","image","PIL","pillow"],"articleSection":["Python"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/","name":"Les images et Python - Mathweb.fr","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg","datePublished":"2020-04-18T14:06:16+00:00","dateModified":"2024-06-09T14:58:16+00:00","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/04\/image-1024x261.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/04\/18\/les-images-et-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"Les images et Python"}]},{"@type":"WebSite","@id":"https:\/\/www.mathweb.fr\/euclide\/#website","url":"https:\/\/www.mathweb.fr\/euclide\/","name":"Mathweb.fr","description":"Math\u00e9matiques, LaTeX et Python","publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mathweb.fr\/euclide\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69","name":"St\u00e9phane Pasquet","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","width":74,"height":77,"caption":"St\u00e9phane Pasquet"},"logo":{"@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp"}}]}},"_links":{"self":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/2192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/comments?post=2192"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/2192\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=2192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/categories?post=2192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/tags?post=2192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}