de Rishav Agarwal
Cum să transformați orice imagine într-o schiță în creion cu 10 linii de cod
Utilizați viziunea computerizată de bază și biblioteca Numpy a lui Python
Am fost întotdeauna fascinat de viziunea computerizată și mai ales de puterea sa de a manipula imagini.
O imagine este practic o serie de numere către Python. Deci, putem efectua o varietate de manipulări ale matricei pentru a obține rezultate foarte interesante. În această postare, vorbesc despre cum să reduceți o imagine într-un contur „creion”.
Pașii
Procesul este destul de simplu:
- Scară de gri a imaginii
- Inversează-l
- Estompați imaginea inversată
- Dodge amestecă imaginea neclară și în tonuri de gri.
Putem alege orice imagine de pe Internet. Voi merge cu această imagine a cricketerului indian Virat Kohli:

1. Încărcați imaginea
import imageioimg="http://static.cricinfo.com/db/PICTURES/CMS/263600/263697.20.jpg"start_img = imageio.imread(img)

Puteți vedea cum Python vede această imagine cu shape
atribut:
start_img.shape(196, 160, 30)
Deci, aceasta este o imagine cu trei canale cu dimensiunea 196×160.
2. Scară de gri
Apoi facem imaginea alb-negru.
Numpy nu are nicio funcție încorporată pentru redimensionarea gri, dar putem converti cu ușurință imaginea folosind formula. Puteți afla de ce această formulă funcționează corect aici.
Y= 0.299 R + 0.587 G + 0.114 B
Deci funcția noastră va arăta astfel:
import numpy as npdef grayscale(rgb): return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
Aplicarea în tonuri de gri:
gray_img = grayscale(start_img)

3. Inversați imaginea
Putem inversa imagini pur și simplu scăzând din 255, deoarece imaginile în tonuri de gri sunt imagini pe 8 biți sau au maximum 256 de tonuri.
inverted_img = 255-gray_img

4. Estompează imaginea
Acum estompăm imaginea inversată. Estomparea se face prin aplicarea unui Filtru gaussian la imaginea inversată. Cheia aici este varianța funcției gaussiene sau sigmei.
Pe măsură ce sigma crește, imaginea devine mai neclară. Sigma controlează amploarea varianței și, astfel, gradul de estompare.
import scipy.ndimageblur_img = scipy.ndimage.filters.gaussian_filter(inverted_img,sigma=5)

5. Dodge and Merge
Color Dodge modul de amestecare împarte stratul inferior de stratul superior inversat. Acest lucru ușurează stratul inferior în funcție de valoarea stratului superior. Avem imaginea neclară, care evidențiază cele mai îndrăznețe margini.
Deoarece toate imaginile noastre sunt citite folosind Numpy, toate calculele matricei sunt foarte rapide.
def dodge(front,back): result=front*255/(255-back) result[result>255]=255 result[back==255]=255 return result.astype(‘uint8’)
final_img= dodge(blur_img,gray_img)

Si asta e!
6. Complotează și salvează
Putem trage imaginea noastră finală folosind plt.imgshow
. Rețineți că trebuie să păstrăm cmap
argument egal cu “gray”
.
import matplotlib.pyplot as pltplt.imshow(final_img, cmap=”gray”)
Putem salva imaginea folosind:
plt.imsave(‘img2.png’, final_img, cmap=’gray’, vmin=0, vmax=255)
Rezultat final

Cod întreg în acțiune

Aici nu avem prea mult spațiu cu care să ne jucăm, cu excepția parametrului sigma în timp ce se estompează.
Pe măsură ce sigma crește, imaginea devine mai clară, dar crește și timpul de rulare. Deci, o sigma de 5 funcționează bine pentru noi.

Cod condensat:
Am promis 10 linii sau mai puțin, așa că iată:
Ca întotdeauna, puteți găsi întregul cod detaliat pe pagina mea GitHub.
PS așa mi-am creat DP-ul mediu. Dacă îți place acest blog, arată câteva ❤️ 🙂
De asemenea, nu dețin această imagine a lui Virat. Sper că nu se supără!