I Python finns flera bibliotek för hantering av bilder, t.ex. OpenCV och Pillow (PIL). Det här avsnittet förklarar hur man får fram bildstorleken (bredd och höjd) för vart och ett av dem.
Du kan få fram bildstorleken (bredd och höjd) som en tupel genom att använda shape för OpenCV och size för Pillow (PIL), men observera att ordningsföljden är annorlunda.
Här finns följande information.
- OpenCV
ndarray.shape
:Få fram bildstorleken (bredd, höjd)- För färgbilder
- För gråskala (monokroma) bilder
- Pillow(PIL)
size
,width
,height
:Få fram bildstorleken (bredd, höjd)
Se följande artikel om hur du får fram storleken (kapaciteten) på en fil i stället för bildstorleken (storlek).
- Relaterade artiklar:Få fram storleken på en fil eller katalog (mapp) i Python
OpenCV: ndarray.shape: Få fram bildstorleken (bredd, höjd)
När en bildfil laddas i OpenCV behandlas den som en NumPy-array ndarray, och bildens storlek (bredd och höjd) kan erhållas från attributet shape, som anger formen på ndarray.
Inte bara i OpenCV, utan även när en bildfil laddas in i Pillow och konverteras till en ndarray, erhålls storleken på den bild som representeras av ndarray med hjälp av shape.
För färgbilder
När det gäller färgbilder används följande tredimensionella ndarray.
- Rad (höjd)
- Rad (bredd)
- Färg (3)
shape är en tupel av ovanstående element.
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'>
För att tilldela varje värde till en variabel packar du upp tupeln på följande sätt.
h, w, c = im.shape print('width: ', w) print('height: ', h) print('channel:', c) # width: 400 # height: 225 # channel: 3
_
Vid uppackning av en tupel kan ovanstående på konventionell väg tilldelas en variabel för värden som inte kommer att användas därefter. Om t.ex. antalet färger (antal kanaler) inte används, används följande.
h, w, _ = im.shape print('width: ', w) print('height:', h) # width: 400 # height: 225
Det kan också användas som det är genom att ange det med index (index) utan att tilldela det till en variabel.
print('width: ', im.shape[1]) print('height:', im.shape[0]) # width: 400 # height: 225
(width, height)
Om du vill få fram denna tupel kan du använda slice och skriva följande: cv2.resize() osv. Om du vill ange argumentet efter storlek använder du detta.
print(im.shape[1::-1]) # (400, 225)
För gråskala (monokroma) bilder
När det gäller gråskala (monokroma) bilder används följande tvådimensionella ndarray.
- Rad (höjd)
- Rad (bredd)
Formen kommer att vara denna tupel.
im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE) print(im_gray.shape) print(type(im_gray.shape)) # (225, 400) # <class 'tuple'>
I princip samma som för färgbilder.
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
Om du vill tilldela bredden och höjden till variabler kan du göra så här, oavsett om bilden är i färg eller gråskala.
h, w = im.shape[0], im.shape[1] print('width: ', w) print('height:', h) # width: 400 # height: 225
(width, height)
Om du vill hämta denna tupel kan du använda skivor och skriva den på följande sätt. Följande skrivstil kan användas oavsett om bilden är i färg eller gråskala.
print(im_gray.shape[::-1]) print(im_gray.shape[1::-1]) # (400, 225) # (400, 225)
Pillow(PIL): size, width, height: Få fram bildstorleken (bredd, höjd)
Det bildobjekt som erhålls genom att läsa en bild med Pillow(PIL) har följande egenskaper.
size
width
height
Storleken är följande tupel.(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
Du kan också få bredden och höjden som attribut.width
, height
print('width: ', im.width) print('height:', im.height) # width: 400 # height: 225
Samma sak gäller för gråskala (monokroma) bilder.
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