Python, OpenCV 및 Pillow(PIL)로 이미지 크기(너비 및 높이) 얻기

사업

Python에는 OpenCV 및 Pillow(PIL)와 같은 이미지 처리를 위한 여러 라이브러리가 있습니다. 이 섹션에서는 각각의 이미지 크기(너비 및 높이)를 얻는 방법을 설명합니다.

OpenCV용 shape와 Pillow용 size(PIL)를 사용하여 이미지 크기(너비 및 높이)를 튜플로 얻을 수 있지만 각각의 순서는 다릅니다.

다음 정보가 여기에 제공됩니다.

  • OpenCV
    • ndarray.shape:이미지 크기(너비, 높이) 가져오기
      • 컬러 이미지의 경우
      • 회색조(흑백) 이미지의 경우
  • Pillow(PIL)
    • size,width,height:이미지 크기(너비, 높이) 가져오기

이미지 크기(크기)가 아닌 파일의 크기(용량)를 구하는 방법은 다음 글을 참고하세요.

OpenCV:ndarray.shape:이미지 크기(너비, 높이) 가져오기

OpenCV에 이미지 파일을 로드하면 NumPy 배열 ndarray로 취급되며, ndarray의 모양을 나타내는 속성 shape에서 이미지의 크기(너비와 높이)를 얻을 수 있습니다.

OpenCV 뿐만 아니라 Pillow에서 이미지 파일을 불러와서 ndarray로 변환할 때 ndarray가 나타내는 이미지의 크기는 shape를 이용하여 구합니다.

컬러 이미지의 경우

컬러 이미지의 경우 다음과 같은 3차원 ndarray가 사용됩니다.

  • 행(높이)
  • 행(폭)
  • 색상 (3)

모양은 위 요소의 튜플입니다.

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

각 값을 변수에 할당하려면 다음과 같이 튜플의 압축을 풉니다.

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

_
튜플의 압축을 풀 때 위의 내용은 일반적으로 이후에 사용되지 않을 값에 대한 변수로 할당될 수 있습니다. 예를 들어 색상 수(채널 수)를 사용하지 않는 경우 다음을 사용합니다.

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

변수에 대입하지 않고 인덱스(인덱스)로 지정하여 그대로 사용할 수도 있습니다.

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

(width, height)
이 튜플을 얻으려면 slice를 사용하고 cv2.resize() 등을 작성할 수 있습니다. 인수를 크기로 지정하려면 이것을 사용하십시오.

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

회색조(흑백) 이미지의 경우

회색조(흑백) 이미지의 경우 다음과 같은 2차원 ndarray가 사용됩니다.

  • 행(높이)
  • 행(폭)

모양은 이 튜플이 됩니다.

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

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

기본적으로 컬러 이미지와 동일합니다.

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

너비와 높이를 변수에 할당하려면 이미지가 컬러인지 회색조인지에 관계없이 다음과 같이 하면 됩니다.

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

(width, height)
이 튜플을 얻으려면 슬라이스를 사용하여 다음과 같이 작성할 수 있습니다. 이미지가 컬러인지 회색조인지에 관계없이 다음과 같은 쓰기 스타일을 사용할 수 있습니다.

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

Pillow(PIL):size, width, height:이미지 크기(너비, 높이) 가져오기

Pillow(PIL)로 이미지를 읽어 얻은 이미지 객체는 다음과 같은 속성을 갖는다.

  • size
  • width
  • height

크기는 다음 튜플입니다.
(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

너비와 높이를 각각 속성으로 가져올 수도 있습니다.
width,height

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

회색조(흑백) 이미지의 경우에도 마찬가지입니다.

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