Að fá myndstærðina (breidd og hæð) með Python, OpenCV og Pillow (PIL)

Viðskipti

Í Python eru nokkur söfn til að meðhöndla myndir, svo sem OpenCV og Pillow (PIL). Þessi hluti útskýrir hvernig á að fá myndstærð (breidd og hæð) fyrir hverja þeirra.

Þú getur fengið myndstærðina (breidd og hæð) sem tuple með því að nota lögun fyrir OpenCV og stærð fyrir kodda (PIL), en athugaðu að röð hvers og eins er mismunandi.

Eftirfarandi upplýsingar eru veittar hér.

  • OpenCV
    • ndarray.shape:Fáðu myndstærð (breidd, hæð)
      • Fyrir litmyndir
      • Fyrir grátóna (einlita) myndir
  • Pillow(PIL)
    • size,width,height:Fáðu myndstærð (breidd, hæð)

Sjá eftirfarandi grein um hvernig á að fá stærð (getu) skráar í stað myndstærðar (stærð).

OpenCV:ndarray.shape:Fáðu myndstærð (breidd, hæð)

Þegar myndskrá er hlaðin inn í OpenCV, er farið með hana sem NumPy fylki ndarray, og stærð myndarinnar (breidd og hæð) er hægt að fá út frá eigindaforminu, sem gefur til kynna lögun ndarraysins.

Ekki aðeins í OpenCV, heldur líka þegar myndaskrá er hlaðin í Pillow og breytt í ndarray, er stærð myndarinnar sem ndarray táknar fengin með því að nota lögun.

Fyrir litmyndir

Þegar um er að ræða litmyndir er eftirfarandi þrívíddarmynd notaður.

  • Röð (hæð)
  • Röð (breidd)
  • Litur (3)

lögun er tuple af ofangreindum þáttum.

import cv2

im = cv2.imread('data/src/lena.jpg')

print(type(im))
# <class 'numpy.ndarray'>

print(im.shape)
print(type(im.shape))
# (225, 400, 3)
# <class 'tuple'>

Til að úthluta hverju gildi til breytu, pakkaðu túpunni upp eins og hér segir.

h, w, c = im.shape
print('width:  ', w)
print('height: ', h)
print('channel:', c)
# width:   400
# height:  225
# channel: 3

_
Þegar túpa er pakkað upp, má venjulega úthluta ofangreindu sem breytu fyrir gildi sem verða ekki notuð eftir það. Til dæmis, ef fjöldi lita (fjöldi rása) er ekki notaður, er eftirfarandi notað.

h, w, _ = im.shape
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

Það er líka hægt að nota það eins og það er með því að tilgreina það með vísitölu (vísitölu) án þess að tengja það við breytu.

print('width: ', im.shape[1])
print('height:', im.shape[0])
# width:  400
# height: 225

(width, height)
Ef þú vilt fá þennan tuple geturðu notað sneið og skrifað eftirfarandi: cv2.resize(), osfrv. Ef þú vilt tilgreina rökin eftir stærð, notaðu þetta.

print(im.shape[1::-1])
# (400, 225)

Fyrir grátóna (einlita) myndir

Þegar um er að ræða grátóna (einlita) myndir er eftirfarandi tvívíddarmynd notaður.

  • Röð (hæð)
  • Röð (breidd)

Lögunin verður þessi tuple.

im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE)

print(im_gray.shape)
print(type(im_gray.shape))
# (225, 400)
# <class 'tuple'>

Í grundvallaratriðum það sama og fyrir litmyndir.

h, w = im_gray.shape
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

print('width: ', im_gray.shape[1])
print('height:', im_gray.shape[0])
# width:  400
# height: 225

Ef þú vilt úthluta breidd og hæð á breytur geturðu gert það á eftirfarandi hátt, hvort sem myndin er í lit eða grátóna.

h, w = im.shape[0], im.shape[1]
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

(width, height)
Ef þú vilt fá þennan tupel geturðu notað sneiðar og skrifað það þannig. Hægt er að nota eftirfarandi ritstíl hvort sem myndin er í lit eða grátóna.

print(im_gray.shape[::-1])
print(im_gray.shape[1::-1])
# (400, 225)
# (400, 225)

Pillow(PIL):size, width, height:Fáðu myndstærð (breidd, hæð)

Myndhlutur sem fæst með því að lesa mynd með Pillow (PIL) hefur eftirfarandi eiginleika.

  • size
  • width
  • height

Stærðin er eftirfarandi tuple.
(width, height)

from PIL import Image

im = Image.open('data/src/lena.jpg')

print(im.size)
print(type(im.size))
# (400, 225)
# <class 'tuple'>

w, h = im.size
print('width: ', w)
print('height:', h)
# width:  400
# height: 225

Þú getur líka fengið breidd og hæð í sömu röð sem eiginleika.
width,height

print('width: ', im.width)
print('height:', im.height)
# width:  400
# height: 225

Sama á við um grátóna (einlita) myndir.

im_gray = Image.open('data/src/lena.jpg').convert('L')

print(im.size)
print('width: ', im.width)
print('height:', im.height)
# (400, 225)
# width:  400
# height: 225