Mendapatkan saiz imej (lebar dan tinggi) dengan Python, OpenCV dan Bantal(PIL)

Perniagaan

Dalam Python terdapat beberapa perpustakaan untuk mengendalikan imej, seperti OpenCV dan Pillow (PIL). Bahagian ini menerangkan cara mendapatkan saiz imej (lebar dan tinggi) untuk setiap satu daripadanya.

Anda boleh mendapatkan saiz imej (lebar dan tinggi) sebagai tuple menggunakan bentuk untuk OpenCV dan saiz untuk Bantal (PIL), tetapi ambil perhatian bahawa susunan setiap satu adalah berbeza.

Maklumat berikut disediakan di sini.

  • OpenCV
    • ndarray.shape:Dapatkan saiz imej (lebar, tinggi)
      • Untuk imej berwarna
      • Untuk imej skala kelabu (monokrom).
  • Pillow(PIL)
    • size,width,height:Dapatkan saiz imej (lebar, tinggi)

Lihat artikel berikut tentang cara mendapatkan saiz (kapasiti) fail dan bukannya saiz imej (saiz).

OpenCV:ndarray.shape:Dapatkan saiz imej (lebar, tinggi)

Apabila fail imej dimuatkan dalam OpenCV, ia dianggap sebagai ndarray tatasusunan NumPy, dan saiz imej (lebar dan tinggi) boleh diperoleh daripada bentuk atribut, yang menunjukkan bentuk ndarray.

Bukan sahaja dalam OpenCV, tetapi juga apabila fail imej dimuatkan dalam Bantal dan ditukar kepada ndarray, saiz imej yang diwakili oleh ndarray diperoleh menggunakan bentuk.

Untuk imej berwarna

Dalam kes imej berwarna, ndarray tiga dimensi berikut digunakan.

  • Baris (tinggi)
  • Baris (lebar)
  • Warna (3)

bentuk ialah tuple unsur-unsur di atas.

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

Untuk menetapkan setiap nilai kepada pembolehubah, bongkar tuple seperti berikut.

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

_
Apabila membongkar tuple, perkara di atas mungkin ditetapkan secara konvensional sebagai pembolehubah untuk nilai yang tidak akan digunakan selepas itu. Contohnya, jika bilangan warna (bilangan saluran) tidak digunakan, perkara berikut digunakan.

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

Ia juga boleh digunakan sebagaimana adanya dengan menyatakannya mengikut indeks (indeks) tanpa memberikannya kepada pembolehubah.

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

(width, height)
Jika anda ingin mendapatkan tuple ini, anda boleh menggunakan slice dan tulis yang berikut: cv2.resize(), dsb. Jika anda ingin menentukan hujah mengikut saiz, gunakan ini.

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

Untuk imej skala kelabu (monokrom).

Dalam kes imej skala kelabu (monokrom), ndarray dua dimensi berikut digunakan.

  • Baris (tinggi)
  • Baris (lebar)

Bentuknya akan menjadi tupel ini.

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

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

Pada asasnya sama seperti untuk imej berwarna.

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

Jika anda ingin menetapkan lebar dan tinggi kepada pembolehubah, anda boleh berbuat demikian seperti berikut, sama ada imej dalam warna atau skala kelabu.

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

(width, height)
Jika anda ingin mendapatkan tupel ini, anda boleh menggunakan kepingan dan menulisnya seperti berikut. Gaya penulisan berikut boleh digunakan sama ada imej dalam warna atau skala kelabu.

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

Pillow(PIL):size, width, height:Dapatkan saiz imej (lebar, tinggi)

Objek imej yang diperoleh dengan membaca imej dengan Bantal(PIL) mempunyai atribut berikut.

  • size
  • width
  • height

Saiznya ialah tuple berikut.
(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

Anda juga boleh mendapatkan lebar dan ketinggian masing-masing sebagai atribut.
width,height

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

Perkara yang sama berlaku untuk imej skala kelabu (monokrom).

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