logo

Vaizdo dydžio keitimas naudojant OpenCV | Python

Vaizdo dydžio keitimas reiškia vaizdų mastelio keitimą. Mastelio keitimas yra naudingas daugelyje vaizdų apdorojimo ir mašininio mokymosi programų. Tai padeda sumažinti vaizdo pikselių skaičių ir turi keletą privalumų, pvz. Tai gali sutrumpinti neuroninio tinklo mokymo laiką, nes kuo daugiau pikselių vaizde, tuo daugiau įvesties mazgų, o tai savo ruožtu padidina modelio sudėtingumą.
Tai taip pat padeda priartinti vaizdus. Daug kartų mums reikia keisti vaizdo dydį, t. y. jį sumažinti arba padidinti, kad atitiktų dydžio reikalavimus. OpenCV pateikia keletą interpoliacijos metodų, kaip pakeisti vaizdo dydį.

Interpoliacijos metodo pasirinkimas dydžiui keisti:



  • cv2.INTER_AREA: naudojama, kai reikia sumažinti vaizdą.
  • cv2.INTER_CUBIC: tai lėta, bet efektyvesnė.
  • cv2.INTER_LINEAR: Tai pirmiausia naudojama, kai reikia keisti mastelį. Tai numatytasis interpoliacijos metodas OpenCV.

Sintaksė: cv2.resize(šaltinis, dsize, pask., fx, fy, interpoliacija)

Parametrai:

    šaltinis: įvesties vaizdo masyvas (vieno kanalo, 8 bitų arba slankiojo kablelio) dsize: išvesties masyvo dydis dest: išvesties masyvas (panašus į įvesties vaizdo masyvo matmenis ir tipą) [pasirenkama] fx: mastelio koeficientas išilgai horizontali ašis [pasirenkama] fy: mastelio koeficientas išilgai vertikalios ašies [pasirenkama] interpoliacija: vienas iš aukščiau pateiktų interpoliacijos metodų [pasirenkama]

Žemiau yra dydžio keitimo kodas:



Python3






import> cv2> import> numpy as np> import> matplotlib.pyplot as plt> image>=> cv2.imread(r>'D:simsebsim21EB-ML-06-10-2022-Test-Output-15PERFORATIONOverkillFailBlister 1 2022-03-12 12-59-43.859 T0 M0 G0 3 PERFORATION Mono.bmp'>,>1>)> # Loading the image> half>=> cv2.resize(image, (>0>,>0>), fx>=> 0.1>, fy>=> 0.1>)> bigger>=> cv2.resize(image, (>1050>,>1610>))> stretch_near>=> cv2.resize(image, (>780>,>540>),> >interpolation>=> cv2.INTER_LINEAR)> Titles>=>[>'Original'>,>'Half'>,>'Bigger'>,>'Interpolation Nearest'>]> images>=>[image, half, bigger, stretch_near]> count>=> 4> for> i>in> range>(count):> >plt.subplot(>2>,>2>, i>+> 1>)> >plt.title(Titles[i])> >plt.imshow(images[i])> plt.show()>

>

>

Išvestis:

Pastaba: Naudojant funkciją cv2.resize() atminkite vieną dalyką, kad seka, perduota naujo vaizdo dydžiui nustatyti (šiuo atveju (1050, 1610)) seka tvarka (plotis, aukštis), kitaip nei tikėtasi ( Aukštis Plotis).