Aller au contenu principal

Modification d'image

Propositions de correction du TD IV.

Ouvrons le placard​

Question 1.1​

def openplacard(img):
(l, h)=fantome.size
for x in range(71, 132):
for y in range(4, 187):
(r, g, b)=Image.getpixel(img, (x, y))
Image.putpixel(img, (x-64, y), (r, g, b))
if x<l and y<h:
(R, G, B)=Image.getpixel(fantome, (x-71, y-4))
Image.putpixel(img, (x, y), (R, G, B))
else:
Image.putpixel(img, (x, y), (0, 0, 0))

Question 1.2​

def openplacard_2(img):
(l, h)=fantome.size
for x in range(187, 135, -1):
for y in range(4, 187):
(r, g, b)=Image.getpixel(img, (x, y))
Image.putpixel(img, (x+32, y), (r, g, b))
if x-135<l and y<h:
(R, G, B)=Image.getpixel(fantome, (x-68, y-4))
Image.putpixel(img, (x, y), (R, G, B))
else:
Image.putpixel(img, (x, y), (0, 0, 0))

Niveaux de couleur​

Question 2.1​

def minimum(img):
(l, h)=img.size
(r, g, b)=Image.getpixel(img, (0, 0))
for x in range(l):
for y in range(h):
(rl, gl, bl)=Image.getpixel(img, (x, y))
if rl<r:
r=rl
if gl<g:
g=gl
if bl<b:
b=bl
return r, g, b

def maximum(img):
(l, h)=img.size
(r, g, b)=Image.getpixel(img, (0, 0))
for x in range(l):
for y in range(h):
(rf, gf, bf)=Image.getpixel(img, (x, y))
if rf>r:
r=rf
if gf>g:
g=gf
if bf>b:
b=bf
return r, g, b

Question 2.2​

def LvlCouleurs(img):
(l, h)=img.size
(r_M, g_M, b_M)=maximum(img)
(r_m, g_m, b_m)=minimum(img)
for x in range(l):
for y in range(h):
(r, g, b)=Image.getpixel(img, (x, y))
r_n=255*(r-r_m)//(r_M-r_m)
g_n=255*(g-g_m)//(g_M-g_m)
b_n=255*(b-b_m)//(b_M-b_m)
Image.putpixel(img, (x, y), (r_n, g_n, b_n))

Détection de contours​

Question 3.1​

def contour_V(img):
(l, h)=img.size
nimg=new("RGB", (l, h))
for x in range(1, l -1):
for y in range(1, h):
(r, g, b)=Image.getpixel(img, (x, y))
(r2, g2, b2)=Image.getpixel(img, (x-1, y))
(r3, g3, b3)=Image.getpixel(img, (x+1, y))
Image.putpixel(nimg, (x, y), (2*r-r2-r3, 2*g-g2-g3, 2*b-b2-b3))
return nimg

Question 3.2​

def contour_H(img):
(l, h)=img.size
nimg=new("RGB", (l, h))
for x in range(1, l):
for y in range(1, h-1):
(r, g, b)=Image.getpixel(img, (x, y))
(r2, g2, b2)=Image.getpixel(img, (x, y-1))
(r3, g3, b3)=Image.getpixel(img, (x, y+1))
Image.putpixel(nimg, (x, y), (2*r-r2-r3, 2*g-g2-g3, 2*b-b2-b3))
return nimg

Question 3.3​

def norme(img):
(l, h)=img.size
nimg=new("RGB", (l, h))
for x in range(1, l -1):
for y in range(1, h-1):
(r, g, b)=Image.getpixel(img, (x, y))
(r2, g2, b2)=Image.getpixel(img, (x-1, y))
(r3, g3, b3)=Image.getpixel(img, (x+1, y))
(r4, g4, b4)=Image.getpixel(img, (x, y-1))
(r5, g5, b5)=Image.getpixel(img, (x, y+1))
Image.putpixel(nimg, (x, y), (4*r-r2-r3-r4-r5, 4*g-g2-g3-g4-g5, 4*b-b2-b3-b4-b5))
return nimg

Symétries​

Question 4.1​

def miroir(img):
(l, h)=img.size
nimg=new("RGB", (l, h))
for x in range(l):
for y in range(h):
(r, g, b)=Image.getpixel(img, (x, y))
Image.putpixel(nimg, (l-x-1, y), (r, g, b))
return nimg

Question 4.2​

def retourner(img):
(l, h)=img.size
nimg=new("RGB", (l, h))
for x in range(l):
for y in range(h):
(r, g, b)=Image.getpixel(img, (x, y))
Image.putpixel(nimg, (l-x-1, h-y-1), (r, g, b))
return nimg

Crypter une image​

Question 5.1​

def bloc(img, x1, x2, y1, y2):
(l, h)=img.size
R=0
G=0
B=0
nbr=len(list(range(x1, x2)))*len(list(range(y1, y2)))
for x in range(x1, x2):
for y in range(y1, y2):
(r, g, b)=Image.getpixel(img, (x, y))
R=R+r
G=G+g
B=B+b
for x in range(x1, x2):
for y in range(y1, y2):
Image.putpixel(img, (x, y), (R//nbr, G//nbr, B//nbr))

Question 5.2​

def newimg(img):
(l, h)=img.size
nimg=new("RGB", (l, h))
for x in range(l):
for y in range(h):
(r, g, b)=Image.getpixel(img, (x, y))
Image.putpixel(nimg, (x, y), (r, g, b))
return nimg

def crypte(img, k):
(l, h)=img.size
nimg=newimg(img)
for x in range(0, l+1, k):
for y in range(0, h+1, k):
a=x+k
b=y+k
if a>l:
a=l
if b>h:
b=h
bloc(nimg, x, a, y, b)
return nimg