cv2.imread()
는 OpenCV에서 이미지를 파일로부터 읽어오는 함수.
Signature:
cv2.imread(filename, flags=cv2.IMREAD_COLOR)
Parameters(매개변수):
filename
(string):- 읽어올 이미지 파일의 경로(Path).
- 파일 경로는 절대 경로나 상대 경로를 사용할 수 있음.
- 예:
'./image.jpg'
,'/home/cv/photo.png'
flags
(int, optional):- 이미지를 읽어올 때 적용할 옵션을 지정.
- 기본값은
cv2.IMREAD_COLOR
이며, 다른 값으로 설정하면 이미지를 읽어오는 방식이 달라짐. - 주요 옵션은 다음과 같음:
cv2.IMREAD_COLOR
(기본값): 이미지를 컬러 이미지로 읽음 (BGR로 불러와짐), 1 에 해당cv2.IMREAD_GRAYSCALE
: 이미지를 그레이스케일 이미지로 읽음 (shape에서 channel이 없음), 0 에 해당cv2.IMREAD_UNCHANGED
: 이미지의 원본 그대로 로드. (알파 채널 포함 시 BGRA), -1 에 해당cv2.IMREAD_ANYCOLOR
: 가능한 한 이미지를 컬러로 로드.cv2.IMREAD_ANYDEPTH
: 일반적으로 이미지는 8비트 정수형(uint8
)으로 로드하지만, 원본 이미지가 16비트 또는 32비트인 경우, 해당 비트 깊이를 유지하여 이미지를 로드.
파일의 경로(Path)에 대한 이해가 부족한 경우 다음 접은 글을 열어서 참고할 것.
URL에 있는 이미지를 읽어들이는 방법은 다음 접은 글을 참고할 것.
Return Value(반환값):
numpy.ndarray
: 이미지가 NumPy 배열로 반환.- 각 픽셀은 BGR 순서로 배열 : 일반적인 RGB Color model이 아님을 주의할 것.
- 이미지가 존재하면 해당 이미지가 반환되고, 존재하지 않으면
None
이 반환.
예제 코드:
#!/bin/env python # 스크립트 실행을 위한 인터프리터 설정
import sys # 시스템 관련 모듈
import cv2 # OpenCV 모듈
import os # 파일 경로 관련 모듈
# 함수: 파일을 읽어와 이미지로 반환하는 함수
def ds_imread(f_str, mode=cv2.COLOR_RGB2BGR):
img = cv2.imread(f_str, mode) # 이미지 파일 읽기
if img is None: # 파일이 없거나 읽을 수 없으면 프로그램 종료
sys.exit(f'Error: There is not a file: {f_str}')
return img # 읽은 이미지를 반환
# 함수: 화면의 해상도를 반환하는 함수
def ds_screen_size():
import tkinter as tk # Tkinter 모듈을 사용해 화면 크기 가져오기
root = tk.Tk() # Tkinter 객체 생성
w = root.winfo_screenwidth() # 화면 너비 얻기
h = root.winfo_screenheight() # 화면 높이 얻기
return w, h # 화면의 너비와 높이를 반환
# 메인 코드 실행부
if __name__ == "__main__":
# 현재 파일이 있는 디렉토리에서 이미지 파일 경로 생성
dir_str = os.path.dirname(__file__)
f_str = os.path.join(dir_str, "cat_cv.tif") # "cat_cv.tif" 파일 경로 설정
# 이미지를 불러오기 (기본적으로 COLOR_RGB2BGR 모드 사용)
img = ds_imread(f_str)
print(f"{img.shape=}") # 이미지의 크기(shape)를 출력
print(f"{img.dtype=}") # 이미지의 데이터 타입(dtype)을 출력
# 이미지의 높이와 너비 얻기
ih, iw = img.shape[:2]
# 화면의 해상도(너비, 높이) 얻기
sw, sh = ds_screen_size()
# 창을 생성하고 창 크기 조정이 가능하도록 설정
cv2.namedWindow('01', cv2.WINDOW_NORMAL)
# 창을 화면 중앙에 이동 (화면 크기에서 이미지 크기의 절반을 뺀 위치)
cv2.moveWindow('01', (sw - iw) // 2, (sh - ih) // 2)
# 이미지를 창에 표시
cv2.imshow('01', img)
# ESC 키를 누르거나 창을 닫을 때까지 대기
while True:
key = cv2.waitKey(100) # 100ms마다 키 입력을 기다림
if key & 0xFF == 27: # ESC 키가 입력되면 종료
break
if cv2.getWindowProperty('01', cv2.WND_PROP_VISIBLE) < 1: # 창이 닫혔는지 확인
break
# 모든 OpenCV 창을 닫음
cv2.destroyAllWindows()
설명:
ds_imread()
함수:- 이 함수는 주어진 파일 경로로부터 이미지를 로드.
- 기본 모드는
cv2.COLOR_RGB2BGR
로 설정. - 만약 파일을 읽을 수 없을 경우, 오류 메시지를 출력하고 프로그램을 종료.
ds_screen_size()
함수:- Tkinter 라이브러리를 이용해 현재 화면의 해상도(너비와 높이)를 반환.
- 이 값은 이미지를 화면 중앙에 배치하는 데 사용됨.
- 메인 코드:
- 현재 스크립트가 실행 중인 디렉토리에서
"cat_cv.tif"
라는 이미지 파일을 로드. ds_screen_size()
함수를 이용해 화면 크기를 얻고,cv2.moveWindow()
를 사용하여 OpenCV 창을 화면 중앙에 배치함.cv2.imshow()
를 이용해 이미지를 창에 표시하고, ESC 키가 입력되거나 창이 닫힐 때까지 프로그램이 실행.
- 현재 스크립트가 실행 중인 디렉토리에서
- 이미지 표시:
- OpenCV 창의 이름을
'01'
로 설정 - 해당 창이 중앙에 위치하도록 이동.
- 이미지를 창에 표시한 후, 사용자가 ESC 키를 누르거나 창을 닫으면 프로그램이 종료.
- OpenCV 창의 이름을
같이보면 좋은 자료들
2022.09.21 - [Programming/DIP] - [DIP] Color Space or Color Model
2022.07.14 - [Programming/DIP] - [OpenCV] cvtColor
'Programming > DIP' 카테고리의 다른 글
[DIP] cv2.imwrite (1) | 2024.09.22 |
---|---|
[DIP] alpha 채널과 검은색 글씨 처리 with convertScaleAbs (0) | 2024.09.16 |
[DIP] plt.imshow: matplotlib.pyplot (1) | 2024.09.16 |
[DIP] cv2.imshow 사용예 (2) | 2024.09.16 |
[OpenCV] VideoCapture 사용법. (0) | 2024.09.11 |