Introducere în OpenCV cu Python 3.x

Deci, salut, oameni buni! Doriți să intrați în lumea viziunii computerizate, procesării imaginilor și AI? trebuie să începeți de undeva, nu-i așa? Dar, înainte de a continua să creați un AI sensibil, capabil să-și amintească fețele oamenilor, trebuie să începeți prin a învăța elementele de bază ale cursului. OpenCV ar putea fi doar lucrul pe care îl căutați. Deci, în postarea de astăzi vom căuta cunoștințe ușoare, dar foarte utile, despre unele prelucrări de bază ale imaginilor și manipulări folosind OpenCV și Python, care ar putea deveni crucială în călătoria dvs. de explorare a viziunii pe computer. Dacă sunteți deja un expert în procesarea imaginilor, această postare ar putea părea foarte meschină pentru dvs., dar, totuși, să o parcurgeți, s-ar putea să vă amintiți un lucru sau două pe care le-ați fi putut uita pierzându-vă pe calea vieții.

Întrucât sunt un mare fan al anime-ului, vom folosi această imagine a bătrânului Goku în forma sa Super Saiyan ca cobai pentru experimentele de procesare a imaginilor din această postare.

Deci, mai întâi să începem învățând să ne încărcăm imaginea:

Utilizați funcția cv2.imread () pentru a citi o imagine. Imaginea ar trebui să fie în directorul de lucru sau ar trebui să fie indicată o cale completă a imaginii.

Al doilea argument este un flag care specifică modul în care ar trebui citită imaginea.

Dar, da, știu că suntem leneși, așa că introducerea acestor nume lungi de steaguri nu este o opțiune, evident că vrem ceva mai ușor, pentru aceasta putem folosi pur și simplu numerele 1,0 și respectiv -1 pentru steagurile de mai sus. Deci, următorul lucru pe care îl vom face este să încărcăm imaginea în tonuri de gri.

Deci, tot ce trebuie să facem este să includem un argument 0 cu linia anterioară cv2.imread pentru a ne afișa imaginea în linie de tonuri de gri, iar codul nostru ar arăta așa:

Acum trebuie să vă gândiți la ce face exact comanda cv2.waitKey (0) ? Comanda cv2.waitKey () este o funcție de legare a tastaturii. Argumentul său este timpul în milisecunde. Funcția așteaptă milisecunde specificate pentru orice eveniment de la tastatură. Dacă apăsați orice tastă în acel moment, programul continuă. Dacă se trece 0 , acesta așteaptă la infinit o lovitură de cheie. Poate fi, de asemenea, setat pentru a detecta anumite lovituri ale tastei, cum ar fi, dacă este apăsată tasta a etc., despre care vom discuta mai jos.

S-ar putea să vă amintiți că am spus anterior că funcția cv2.imread () ne returnează imaginea sub forma unui tablou Numpy. Deci da, putem obține forma matricei Numpy pentru a cunoaște rezoluția imaginii noastre. Putem face acest lucru folosind linia 11 din codul nostru care este print(image.shape).

Făcând acest lucru, vom afla că rezoluția imaginii noastre este de 353 x 500, ceea ce înseamnă că imaginea noastră are o înălțime de 353 pixeli și o lățime de 500 pixeli, dar vedem, de asemenea, că există un al treilea număr ca ieșire. Acest număr ne spune pur și simplu despre numărul de canale de culoare din imaginea noastră, adică 3, pentru roșu, albastru și verde, deoarece imaginea noastră este în format RGB. O imagine RGB, denumită uneori o imagine truecolor , este stocată ca o matrice de date m-by-n-by-3 care definește componentele de culoare roșie, verde și albastră pentru fiecare pixel individual. Culoarea fiecărui pixel este determinată de combinația intensităților roșu, verde și albastru stocate în fiecare plan de culoare la locația pixelului.

Destul de acest mumbo-jumbo ticălos și tehnic, să mergem mai departe învățând cum să ne redimensionăm imaginea. Putem face acest lucru folosind comanda cv2.resize (). Să modificăm rezoluția imaginii noastre ca 150 x 100.

Dimensiunea imaginii poate fi specificată manual sau puteți specifica factorul de scalare. Sunt utilizate diferite metode de interpolare. Metodele de interpolare preferate sunt cv.INTER_AREA pentru micșorare și cv.INTER_CUBIC (lent) & amp; cv.INTER_LINEAR pentru zoom. În mod implicit, metoda de interpolare utilizată este cv.INTER_LINEAR pentru toate scopurile de redimensionare. După cum puteți vedea, folosim cv2.INTER_AREA ca factor de scalare.

Să învățăm acum cum să ne rotim imaginea, folosiți următoarele comenzi pentru a face acest lucru. În primul rând, stocăm înălțimea și lățimea imaginii noastre și calculăm centrul acesteia. Apoi formăm o nouă matrice de rotație care ar descrie cum ar arăta imaginea noastră atunci când este rotită în jurul centrului său, vom face acest lucru folosind cv2.getRotationMatrix2D () . Al doilea argument este cantitatea de grade cu care am dori să ne rotim imaginea, i, e 90 de grade în acest caz. Al treilea parametru indică factorul de scalare ca 1.0, ceea ce înseamnă că nu redimensionăm imaginea în niciun fel. cv2.warpAffine () este utilizat pentru a returna efectiv imaginea în forma rotită de care avem nevoie.

Următorul lucru pe care am învăța să-l facem este să ne decupăm imaginea, ceea ce este un lucru foarte ușor de făcut. Pur și simplu trecem imaginea cu coordonatele necesare ale axelor Y și X pentru a decupa partea de imagine de care avem nevoie.

De asemenea, puteți desena lucruri aleatorii pe imagine dacă doriți, utilizând funcții precum cv2.line () , cv2.rectangle , cv2.circle (). Toate aceste funcții iau primul parametru ca imagine peste care ar fi desenate figurile. Ultimul parametru descrie grosimea figurii desenate și dacă este dată ca -1 atunci întreaga figură este colorată, dar nu puteți utiliza -1 ca ultim parametru pentru linie din motivul evident că este deja colorat.


Ultimul lucru care ar fi acoperit în această postare este despre a scrie lucruri pe o imagine și a o salva permanent. cv2.putText () este utilizat pentru scrierea unui text în imaginea noastră. Primul parametru este evident imaginea noastră originală, următorul este șirul care urmează să fie afișat. Al treilea parametru descrie coordonatele în care urmează să fie plasat textul nostru, iar următorul este stilul de font pe care îl vom folosi. Următorii 2 parametri descriu culoarea textului și separarea caracterelor. Parametrul cv2.LINE_AA descrie că anti-aliasing trebuie utilizat pentru a afișa șirul.

Și iată, vă puteți felicita, ați învățat sau cel puțin ați revizuit multe lucruri astăzi! Acum mergeți mai departe și explorați singur codul și încercați-l pe imaginile preferate. Probabil încercați să creați acele meme Vegeta populare precum cea de mai jos. Lol!