728x90
728x90
cv2.imread()
는 OpenCV에서 이미지를 파일로부터 읽어오는 함수.
Signiture:
cv2.imread(filename, flags=cv2.IMREAD_COLOR)
매개변수:
filename
(string):- 읽어올 이미지 파일의 경로.
- 파일 경로는 절대 경로나 상대 경로를 사용할 수 있음.
- 예:
'image.jpg'
,'/home/cv/photo.png'
flags
(int, optional):- 이미지를 읽어올 때 적용할 옵션을 지정합니다. 기본값은
cv2.IMREAD_COLOR
이며, 다른 값으로 설정하면 이미지를 읽어오는 방식이 달라집니다. - 주요 옵션은 다음과 같습니다:
cv2.IMREAD_COLOR
(기본값): 이미지를 컬러 이미지로 읽음 (BGR로 불러와짐)cv2.IMREAD_GRAYSCALE
: 이미지를 그레이스케일 이미지로 읽음 (shape에서 channel이 없음)cv2.IMREAD_UNCHANGED
: 이미지의 원본 그대로 로드. (알파 채널 포함 시 BGRA)cv2.IMREAD_ANYCOLOR
: 가능한 한 이미지를 컬러로 로드.cv2.IMREAD_ANYDEPTH
: 일반적으로 이미지는 8비트 정수형(uint8
)으로 로드하지만, 원본 이미지가 16비트 또는 32비트인 경우, 해당 비트 깊이를 유지하여 이미지를 로드.
- 이미지를 읽어올 때 적용할 옵션을 지정합니다. 기본값은
반환 값:
numpy.ndarray
: 이미지가 NumPy 배열로 반환.- 각 픽셀은 BGR 순서로 배열.
- 이미지가 존재하면 해당 이미지가 반환되고, 존재하지 않으면
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 |