Pagkuha ng laki ng imahe (lapad at taas) gamit ang Python, OpenCV at Pillow(PIL)

Negosyo

Sa Python mayroong ilang mga aklatan para sa paghawak ng mga imahe, tulad ng OpenCV at Pillow (PIL). Ipinapaliwanag ng seksyong ito kung paano kunin ang laki ng larawan (lapad at taas) para sa bawat isa sa kanila.

Maaari mong makuha ang laki ng imahe (lapad at taas) bilang isang tuple gamit ang hugis para sa OpenCV at laki para sa Pillow (PIL), ngunit tandaan na ang pagkakasunud-sunod ng bawat isa ay iba.

Ang sumusunod na impormasyon ay ibinigay dito.

  • OpenCV
    • ndarray.shape:Kunin ang laki ng larawan (lapad, taas)
      • Para sa mga larawang may kulay
      • Para sa grayscale (monochrome) na mga larawan
  • Pillow(PIL)
    • size,width,height:Kunin ang laki ng larawan (lapad, taas)

Tingnan ang sumusunod na artikulo kung paano kunin ang laki (kapasidad) ng isang file sa halip na ang laki ng imahe (laki).

OpenCV:ndarray.shape:Kunin ang laki ng larawan (lapad, taas)

Kapag ang isang file ng imahe ay na-load sa OpenCV, ito ay itinuturing bilang isang NumPy array ndarray, at ang laki ng imahe (lapad at taas) ay maaaring makuha mula sa hugis ng katangian, na nagpapahiwatig ng hugis ng ndarray.

Hindi lamang sa OpenCV, ngunit din kapag ang isang file ng imahe ay na-load sa Pillow at na-convert sa isang ndarray, ang laki ng imahe na kinakatawan ng ndarray ay nakuha gamit ang hugis.

Para sa mga larawang may kulay

Sa kaso ng mga larawang may kulay, ang sumusunod na tatlong-dimensional na ndarray ay ginagamit.

  • Taas ng hilera)
  • Hilera (lapad)
  • Kulay (3)

Ang hugis ay isang tuple ng mga elemento sa itaas.

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'>

Upang italaga ang bawat halaga sa isang variable, i-unpack ang tuple gaya ng sumusunod.

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

_
Kapag nag-unpack ng tuple, ang nasa itaas ay maaaring kumbensyonal na italaga bilang variable para sa mga value na hindi na gagamitin pagkatapos noon. Halimbawa, kung ang bilang ng mga kulay (bilang ng mga channel) ay hindi ginagamit, ang sumusunod ay ginagamit.

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

Maaari rin itong gamitin bilang ay sa pamamagitan ng pagtukoy nito sa pamamagitan ng index (index) nang hindi ito itinatalaga sa isang variable.

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

(width, height)
Kung gusto mong makuha ang tuple na ito, maaari mong gamitin ang slice at isulat ang sumusunod: cv2.resize(), atbp. Kung gusto mong tukuyin ang argument ayon sa laki, gamitin ito.

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

Para sa grayscale (monochrome) na mga larawan

Sa kaso ng grayscale (monochrome) na mga imahe, ang sumusunod na dalawang-dimensional na ndarray ay ginagamit.

  • Taas ng hilera)
  • Hilera (lapad)

Ang magiging hugis ay ang tuple na ito.

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

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

Karaniwang kapareho ng para sa mga larawang may kulay.

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

Kung gusto mong italaga ang lapad at taas sa mga variable, magagawa mo ito bilang mga sumusunod, kung ang imahe ay nasa kulay o grayscale.

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

(width, height)
Kung gusto mong makuha ang tuple na ito, maaari mong gamitin ang mga hiwa at isulat ito bilang mga sumusunod. Maaaring gamitin ang sumusunod na istilo ng pagsulat kung ang imahe ay nasa kulay o grayscale.

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

Pillow(PIL):size, width, height:Kunin ang laki ng larawan (lapad, taas)

Ang object ng imahe na nakuha sa pamamagitan ng pagbabasa ng isang imahe na may Pillow(PIL) ay may mga sumusunod na katangian.

  • size
  • width
  • height

Ang laki ay ang sumusunod na 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

Maaari mo ring makuha ang lapad at taas ayon sa pagkakabanggit bilang mga katangian.
width,height

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

Ang parehong ay totoo para sa grayscale (monochrome) na mga imahe.

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