728x90
plt.imshow()
는 matplotlib
에서 이미지를 시각화할 때 사용되는 함수
Signature:
plt.imshow(X, cmap=None, norm=None, interpolation=None,
aspect=None, alpha=None, vmin=None, vmax=None,
origin=None, extent=None, filternorm=True,
filterrad=4.0, resample=None, url=None, **kwargs)
Parmaters:
X
(array-like or PIL image):- 화면에 표시할 이미지 데이터.
- 2D 배열 또는 3D 배열 형태
- 2D는 그레이스케일 이미지, 3D는 RGB 또는 RGBA 이미지.
- 데이터 타입은
float
,int
등 다양한 형식을 지원 - 값의 범위는
0.0 ~ 1.0
또는0 ~ 255
입니다.
cmap
(str orColormap
, default=None):- 그레이스케일이나 2D 배열을 컬러 맵으로 변환하여 색을 입힐 때 사용됨.
'gray'
,'viridis'
,'hot'
,'cool'
등 다양한 컬러 맵을 사용 가능.
norm
(Normalize
, optional):- 데이터의 값 범위를 지정된 컬러 맵 범위로 Normalization(정규화)하는 데 사용됨.
- 예를 들어, 데이터를 특정 범위로 정규화하여 시각화할 수 있음.
interpolation
(str, default=None):- 이미지 확대/축소 시 사용하는 보간 방법을 지정.
- 사용 가능한 값
'nearest'
,'bilinear'
,'bicubic'
,'lanczos'
- 기본값은
None
이며, 이는 기본 보간 방식을 사용.
aspect
(str or float, default=None):- 이미지의 가로-세로 비율을 조정.
'equal'
을 사용하면 이미지의 픽셀 비율을 1:1로 설정'auto'
는 데이터의 크기에 따라 비율을 조정.
alpha
(float, default=None):- 이미지의 투명도를 설정.
- 값의 범위는
0.0
(완전히 투명)에서1.0
(완전히 불투명).
vmin
,vmax
(scalar, optional):- 컬러 맵의 최소값과 최대값을 지정.
- 이 값들을 설정하면 보여질 때
X
데이터의 값이 이 범위로 truncation이 일어남. . - 기본적으로
X
데이터의 최소값과 최대값으로 설정됨.
origin
(str, default=None):- 이미지의 원점을 설정.
'upper'
는 이미지의 왼쪽 상단이 원점'lower'
는 왼쪽 하단이 원점.
extent
(list, default=None):- 데이터 축의 좌표 범위를 지정.
[left, right, bottom, top]
의 순서로 리스트로 입력- 이미지가 해당 좌표 범위에 맞게 조정됨.
filternorm
(bool, default=True):- 이미지 필터링을 할 때, 정규화를 적용할지 여부를 결정.
filterrad
(float, default=4.0):- 필터의 반경을 설정.
- 필터를 사용하여 이미지 데이터를 보간할 때 적용.
resample
(bool, default=None):- True로 설정하면 이미지 리샘플링을 강제로 수행.
- 리샘플링이란 이미지 크기 조정 시 발생하는 픽셀 데이터 변경을 의미함.
https://dsaint31.me/mkdocs_site/DIP/cv2/ch00/dip_0_00/#1-3-matplotlib-image
예제 코드
import sys
import os
# 현재 파일의 디렉토리 경로를 가져와서 sys.path에 추가 (모듈 경로 설정)
dir_path = os.path.dirname(__file__)
sys.path.append(dir_path)
# 필요한 라이브러리 임포트
import cv2
import numpy as np
import matplotlib.pyplot as plt
from cv_imread import ds_imread, ds_screen_size # 사용자 정의 함수 (파일 읽기 및 화면 크기 관련)
# 이미지 파일 경로 설정 (cat_cv.tif 파일을 현재 디렉토리에서 읽어옴)
f_str = os.path.join(dir_path, 'cat_cv.tif')
# f_str = os.path.join(dir_path, 'opencv_logo.png') # 다른 이미지 파일 경로 (필요시 사용)
# 사용자 정의 함수 ds_imread를 사용해 이미지 읽기, 원본 형식(변환 없음)으로 로드
img = ds_imread(f_str, cv2.IMREAD_UNCHANGED)
# OpenCV 이미지 데이터를 Matplotlib에서 사용할 수 있도록 변환
if len(img.shape) == 3: # 이미지가 3채널 이상인 경우 (컬러 이미지)
if img.shape[2] > 3: # 이미지에 4채널(알파 채널)이 포함된 경우 (BGRA 형식)
cv2.cvtColor(img, cv2.COLOR_BGRA2RGBA) # BGRA를 RGBA로 변환
else:
img = img[..., ::-1] # BGR을 RGB로 변환 (채널 순서 변경)
# img = plt.imread(f_str)
# Matplotlib에서 이미지 표시를 위한 figure 및 subplot 생성
fig, ax = plt.subplots()
# 이미지를 subplot에 표시
im = ax.imshow(img)
# 컬러바(colorbar) 생성 및 설정 (이미지의 색상 범위를 나타내는 바)
cbar = fig.colorbar(im, ax=ax)
cbar.set_ticks(np.arange(0, 256, 255)) # 컬러바의 눈금 설정 (0부터 255까지)
cbar.set_ticklabels(np.arange(0, 256, 255)) # 컬러바의 눈금 라벨 설정 (0과 255)
# x축과 y축 눈금을 제거 (이미지 좌표 눈금이 표시되지 않도록)
ax.set_xticks([])
ax.set_yticks([])
# 제목 설정 (타이틀을 'alpha channel'로 설정)
ax.set_title('alpha channel')
# Matplotlib 창에 이미지 표시
plt.show()
코드 설명:
sys.path.append(dir_path)
:- 현재 파일의 디렉토리를
sys.path
에 추가하여 모듈을 가져올 수 있도록 경로를 설정. cv_imread
와 같은 사용자 정의 모듈을 불러오는 데 사용됨.
- 현재 파일의 디렉토리를
- 이미지 파일 경로 설정:
cat_cv.tif
파일을 불러옴.- 필요에 따라
opencv_logo.png
파일로 변경할 수 있음.
ds_imread(f_str, cv2.IMREAD_UNCHANGED)
:cv_imread
모듈에 있는ds_imread
함수를 사용해 이미지 로드.cv2.IMREAD_UNCHANGED
는 이미지 파일을 원본 그대로 불러오는 옵션임.
- OpenCV에서 Matplotlib로 이미지 변환:
- OpenCV에서 이미지를 로드하면 BGR 형식으로 불러오지만, Matplotlib은 RGB 형식을 사용함.
- 때문에 이미지가 알파 채널(BGRA)을 포함하고 있으면 이를 RGBA로 변환.
plt.subplots()
:- Matplotlib에서 이미지를 그릴 수 있는 Figure와 Axes(서브플롯)을 생성.
- 이미지 표시 및 컬러바 설정:
ax.imshow(img)
로 이미지를 표시fig.colorbar()
로 이미지의 컬러바를 추가.- 이 컬러바는 이미지의 색상 범위를 나타내며, 눈금은 0부터 255까지 설정.
- 눈금 제거 및 제목 설정:
ax.set_xticks([])
와ax.set_yticks([])
로 축 눈금을 제거- 이미지의 제목을 "alpha channel"로 설정합니다.
- 이미지 표시:
plt.show()
를 호출하여 Matplotlib 창에 이미지를 표시.
같이 보면 좋은 URLs
https://dsaint31.me/mkdocs_site/DIP/cv2/ch00/dip_0_00/
https://dsaint31.tistory.com/653
반응형
'Programming > DIP' 카테고리의 다른 글
[DIP] alpha 채널과 검은색 글씨 처리 with convertScaleAbs (0) | 2024.09.16 |
---|---|
[CV] cv2.imread() (4) | 2024.09.16 |
[DIP] cv2.imshow 사용예 (2) | 2024.09.16 |
[OpenCV] VideoCapture 사용법. (0) | 2024.09.11 |
[OpenCV] API Backend for VideoCapture (0) | 2024.09.11 |