Lấy kích thước hình ảnh (chiều rộng và chiều cao) bằng Python, OpenCV và Pillow (PIL)

Kinh doanh

Trong Python có một số thư viện để xử lý hình ảnh, chẳng hạn như OpenCV và Pillow (PIL). Phần này giải thích cách lấy kích thước hình ảnh (chiều rộng và chiều cao) cho từng loại.

Bạn có thể lấy kích thước hình ảnh (chiều rộng và chiều cao) dưới dạng một tuple bằng cách sử dụng hình dạng cho OpenCV và kích thước cho Gối (PIL), nhưng lưu ý rằng thứ tự của mỗi loại là khác nhau.

Thông tin sau được cung cấp ở đây.

  • OpenCV
    • ndarray.shape:Lấy kích thước hình ảnh (chiều rộng, chiều cao)
      • Đối với hình ảnh màu
      • Đối với hình ảnh thang độ xám (đơn sắc)
  • Pillow(PIL)
    • size,width,height:Lấy kích thước hình ảnh (chiều rộng, chiều cao)

Xem bài viết sau về cách lấy kích thước (dung lượng) của một tập tin thay vì kích thước (kích thước) ảnh.

OpenCV:ndarray.shape:Lấy kích thước hình ảnh (chiều rộng, chiều cao)

Khi một tệp hình ảnh được tải trong OpenCV, nó được coi là một mảng NumPy và kích thước của hình ảnh (chiều rộng và chiều cao) có thể nhận được từ hình dạng thuộc tính, cho biết hình dạng của ndarray.

Không chỉ trong OpenCV, mà còn khi tệp hình ảnh được tải trong Pillow và được chuyển đổi thành ndarray, kích thước của hình ảnh được đại diện bởi ndarray sẽ thu được bằng cách sử dụng shape.

Đối với hình ảnh màu

Trong trường hợp ảnh màu, ndarray ba chiều sau đây được sử dụng.

  • Hàng (chiều cao)
  • Hàng (chiều rộng)
  • Màu (3)

shape là một bộ của các yếu tố trên.

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

Để gán từng giá trị cho một biến, hãy giải nén bộ giá trị như sau.

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

_
Khi giải nén một bộ giá trị, giá trị trên có thể được gán theo quy ước như một biến cho các giá trị sẽ không được sử dụng sau đó. Ví dụ, nếu số lượng màu (số kênh) không được sử dụng, thì tùy chọn sau sẽ được sử dụng.

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

Nó cũng có thể được sử dụng như hiện tại bằng cách chỉ định nó theo chỉ mục (index) mà không cần gán nó cho một biến.

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

(width, height)
Nếu bạn muốn lấy bộ giá trị này, bạn có thể sử dụng slice và viết như sau: cv2.resize (), v.v. Nếu bạn muốn chỉ định đối số theo kích thước, hãy sử dụng cái này.

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

Đối với hình ảnh thang độ xám (đơn sắc)

Trong trường hợp ảnh thang độ xám (đơn sắc), ndarray hai chiều sau đây được sử dụng.

  • Hàng (chiều cao)
  • Hàng (chiều rộng)

Hình dạng sẽ là tuple này.

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

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

Về cơ bản giống như đối với ảnh màu.

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

Nếu bạn muốn gán chiều rộng và chiều cao cho các biến, bạn có thể thực hiện như sau, cho dù hình ảnh có màu hay thang độ xám.

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

(width, height)
Nếu bạn muốn lấy tuple này, bạn có thể sử dụng các lát cắt và viết nó như sau. Kiểu viết sau đây có thể được sử dụng cho dù hình ảnh là màu hay thang độ xám.

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

Pillow(PIL):size, width, height:Lấy kích thước hình ảnh (chiều rộng, chiều cao)

Đối tượng hình ảnh thu được bằng cách đọc hình ảnh với Pillow (PIL) có các thuộc tính sau.

  • size
  • width
  • height

Kích thước là tuple sau đây.
(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

Bạn cũng có thể lấy chiều rộng và chiều cao tương ứng làm thuộc tính.
width,height

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

Điều này cũng đúng với ảnh thang độ xám (đơn sắc).

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