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