logo

OpenCV와 이미지 입출력

OpenCV

OpenCV(Open Source Computer Vision Library)는 이미지 처리와 컴퓨터 비전용 오픈 소스 라이브러리.

  • 이미지 파일 읽기와 저장
  • 필터링, 색 변환, 경계 검출 등 이미지 처리
  • 동영상 파일과 카메라 프레임 처리
  • 특징점, 기하학적 변환, 카메라 교정
  • 객체 탐지와 추적 등 컴퓨터 비전

OpenCV의 핵심은 C++로 작성되어 있으며 Python, Java 등 여러 언어에서 사용 가능. OpenCV-Python에서 이미지는 NumPy 배열로 표현.

실습 준비

pip install opencv-python
import cv2 as cv
cv.__version__
실행 결과
'4.12.0'

설치 환경에 따라 버전 문자열은 달라질 수 있음.

  • opencv-python은 이미지·영상 처리와 데스크톱 창 표시 기능을 포함.
  • 화면 출력 기능이 필요 없는 서버 환경에서는 opencv-python-headless를 사용할 수 있음.

이미지 파일 읽기

image_path = "balloon.webp"
image = cv.imread(image_path)
  • cv.imread()는 파일을 디코딩하여 NumPy 배열을 반환.
  • 파일이 없거나 지원하지 않는 형식이면 예외 대신 None을 반환.
type(image)  # 자료형
실행 결과
<class 'numpy.ndarray'>

읽기 모드

cv.imread()의 두 번째 인자로 이미지 읽기 방식 지정 가능.

  • IMREAD_COLOR: 컬러 이미지로 읽음. 알파 채널이 있어도 제거
color = cv.imread(image_path, cv.IMREAD_COLOR)
color.shape  # 배열 형태
실행 결과
(1024, 1024, 3)
  • IMREAD_GRAYSCALE: 1채널 그레이스케일 이미지로 읽음
gray = cv.imread(image_path, cv.IMREAD_GRAYSCALE)
gray.shape  # 배열 형태
실행 결과
(1024, 1024)
  • IMREAD_UNCHANGED: 알파 채널을 포함한 원본 채널 구성 유지
unchanged = cv.imread(image_path, cv.IMREAD_UNCHANGED)
unchanged.shape  # 배열 형태
실행 결과
(1024, 1024, 3)

컬러 배열은 일반적으로 (세로, 가로, 3), 그레이스케일 배열은 (세로, 가로) 형태임.

이미지 파일 저장

cv.imwrite()는 파일 확장자에 맞는 인코더를 선택하여 배열을 이미지 파일로 저장.

saved = cv.imwrite("balloon_gray.png", gray)
saved  # 저장 성공 여부 (True: 성공, False: 실패)
실행 결과
True
  • JPEG 품질이나 PNG 압축률 지정 가능
cv.imwrite(
    "balloon_q90.jpg",
    image,
    [cv.IMWRITE_JPEG_QUALITY, 90],  # JPEG 품질을 90/100으로 지정
)
실행 결과
True

데스크톱 창에서 이미지 보기

cv.imshow()는 로컬 데스크톱에 별도의 창을 띄움.

cv.imshow("balloon", image)
cv.waitKey(0)
cv.destroyAllWindows()
  • cv.waitKey(0): 키 입력이 있을 때까지 대기
  • cv.destroyAllWindows(): OpenCV가 만든 창 닫기
  • 원격 서버나 일반적인 Colab 환경에서는 GUI 창을 사용할 수 없음
Previous
색상 채널과 비트 깊이