1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| # -*- coding: utf-8 -*-
from PIL import Image
ext= '.png'
img = "panneau.jpg"
mon_image1 = Image.open(img)
def seuil2(x):
if x<100:
return 0
elif x>150:
return 255
else:
return x
# seuillage à 2 seuils d'une image en niveaux de gris
mon_image = Image.open(img).convert('L')
pixel = mon_image.load()
for colonne in range(mon_image.size[0]):
for ligne in range(mon_image.size[1]):
pixel[colonne,ligne] = seuil2(pixel[colonne,ligne])
mon_image.save('panneau_seuil2.png')
mon_image.show()
def filtre_contour(image1,seuil):
largeur,hauteur = image1.size
image2 = Image.new('L',(largeur,hauteur))
image1 = image1.convert('L')
pixels1 = image1.load()
pixels2 = image2.load()
for ligne in range(hauteur-1):
for colonne in range(largeur-1):
if abs(pixels1[colonne,ligne]-pixels1[colonne,ligne+1])\
> seuil or\
abs(pixels1[colonne,ligne]-pixels1[colonne+1,ligne]) > seuil:
pixels2[colonne,ligne] = 0
else:
pixels2[colonne,ligne] = 255
return image2
res1 = filtre_contour(mon_image1,20)
res1.save('panneau_cont1'+ext)
res1.show()
noyau1 =\
[-1,-1,-1,\
-1 , 8,-1,\
-1 ,-1,-1]
def filtre_contour1(image1,noyau):
largeur,hauteur = image1.size
# conversion en niveaux de gris, mode RGB
image1 = image1.convert("L")
image2 = Image.new("L",(largeur,hauteur))
# filtrage de l'image en niveaux de gris
for y in range(1,hauteur-1):
for x in range(1,largeur-1):
liste_pix=[]
liste_pix.append(image1.getpixel((x-1,y-1)))
liste_pix.append(image1.getpixel((x,y-1)))
liste_pix.append(image1.getpixel((x+1,y-1)))
liste_pix.append(image1.getpixel((x-1,y)))
liste_pix.append(image1.getpixel((x,y)))
liste_pix.append(image1.getpixel((x+1,y)))
liste_pix.append(image1.getpixel((x-1,y+1)))
liste_pix.append(image1.getpixel((x,y+1)))
liste_pix.append(image1.getpixel((x+1,y+1)))
pixel=0
for i in range(9):
pixel=int(pixel+noyau[i]*liste_pix[i])
pixel = pixel + 128
image2.putpixel((x,y),pixel)
return image2
filtre1 = filtre_contour1(mon_image1,noyau1)
filtre1.save("panneau_cont2"+ext)
filtre1.show()
def filtre_contour2(image1,noyau):
largeur,hauteur = image1.size
# conversion en niveaux de gris, mode RGB
image1 = image1.convert("L")
image2 = Image.new("L",(largeur,hauteur))
# filtrage de l'image en niveaux de gris
for y in range(1,hauteur-1):
for x in range(1,largeur-1):
liste_pix=[]
liste_pix.append(image1.getpixel((x-1,y-1)))
liste_pix.append(image1.getpixel((x,y-1)))
liste_pix.append(image1.getpixel((x+1,y-1)))
liste_pix.append(image1.getpixel((x-1,y)))
liste_pix.append(image1.getpixel((x,y)))
liste_pix.append(image1.getpixel((x+1,y)))
liste_pix.append(image1.getpixel((x-1,y+1)))
liste_pix.append(image1.getpixel((x,y+1)))
liste_pix.append(image1.getpixel((x+1,y+1)))
pixel=0
for i in range(9):
pixel=int(pixel+noyau[i]*liste_pix[i])
if pixel < 0:
pixel =0
if pixel > 255:
pixel = 255
pixel = pixel + 128
image2.putpixel((x,y),pixel)
return image2
filtre2 = filtre_contour2(mon_image1,noyau1)
filtre2.save("panneau_cont3"+ext)
filtre2.show() |