공부중

[Open CV] 이미지 읽기 본문

인공지능...?/Open CV

[Open CV] 이미지 읽기

복습 2024. 8. 29. 15:25
728x90

간단한 예제를 확인해보자

 

import cv2

# 이미지 파일 경로
image_path = 'path_to_your_image.jpg'

# 이미지 읽기
img = cv2.imread(image_path, cv2.IMREAD_COLOR)

# 이미지가 정상적으로 읽혔는지 확인
if img is not None:
    # 이미지를 'Example Window'라는 이름의 창에 표시
    cv2.imshow('Example Window', img)

    # 사용자가 키를 누를 때까지 대기 (0은 무한 대기)
    cv2.waitKey(0)

    # 모든 창 닫기
    cv2.destroyAllWindows()
else:
    print("Error: Image cannot be loaded!")

 

 

코드를 하나씩 확인해보자.

 

1. cv2.imread(filename, flags=cv2.IMREAD_COLOR)

이 함수는 이미지 파일을 읽어 NumPy 배열로 변환합니다. 주요 매개변수와 기능은 다음과 같습니다:

  • filename: 읽어올 이미지 파일의 경로를 문자열로 지정합니다. 파일 경로는 절대 경로나 상대 경로 모두 사용 가능합니다.
  • flags: 이미지 파일을 읽는 방식을 지정합니다.
    • cv2.IMREAD_COLOR (1): 기본값으로 설정되며, 이미지를 컬러로 읽고 투명한 부분은 무시됩니다.
    • cv2.IMREAD_GRAYSCALE (0): 이미지를 그레이스케일로 읽습니다. 이미지 처리 시 중간 단계로 많이 사용됩니다.
    • cv2.IMREAD_UNCHANGED (-1): 이미지 파일을 알파 채널(투명도)을 포함하여 그대로 읽습니다.
  • 반환값: 읽은 이미지 데이터가 담긴 NumPy 배열을 반환합니다.
  • 주의: 잘못된 경로로 읽어도 오류를 발생시키지 않고 NoneType을 반환합니다.

 

 

 

2. cv2.imshow(winname, img)

코랩에서 사용할 경우에는 아래와 같이 사용해야 한다.

from google.colab.patches import cv2_imshow

cv2_imshow(img)

 

그 외 로컬에서 동작할 때는 아래와 같이 사용한다.

 

import cv2

cv2.imshow('IMG', img)

이 함수는 지정된 창에 이미지를 표시합니다. 주요 매개변수와 기능은 다음과 같습니다:

  • winname: 이미지를 표시할 창의 이름을 문자열로 지정합니다. 이 이름은 창의 제목 표시줄에 표시되며, 여러 개의 이미지를 출력할 때 각 창을 구별하기 위해 사용됩니다.
    •  
  • img: 출력할 이미지 데이터가 담긴 NumPy 배열입니다. OpenCV로 읽거나 처리한 BGR 형식의 이미지 데이터를 포함합니다.
    • NumPy 배열은 통상적으로 (H, W, C) 형태로 구성되어 있습니다. 여기서 H는 이미지의 높이(Height), W는 너비(Width), 그리고 C는 채널 수(Channels)를 의미
    • buffer로, 3차원 Numpy로 BGR로 구성되어 있다. OpenCV에서 읽은 이미지 데이터는 기본적으로 BGR 형식으로 채널이 구성되어 있습니다. BGR은 블루(Blue), 그린(Green), 레드(Red)의 색상 채널을 의미하며, 이 순서대로 데이터가 배열에 저장됩니다.
    • 더보기
      BGR 색상 형식

      OpenCV는 BGR 색상 형식을 사용하는 것이 특징입니다. 대부분의 이미지 처리 라이브러리나 시스템에서는 RGB 형식을 사용하므로, 때로는 이를 RGB로 변환해야 할 필요가 있습니다. BGR 형식은 각 픽셀에 대해 3개의 색상 채널 정보를 가지고 있으며, 이 정보는 3차원 배열의 형태로 관리됩니다.
      NumPy 배열 구조

      예를 들어, 640x480 크기의 이미지를 처리할 경우 NumPy 배열의 형태는 (480, 640, 3)이 됩니다. 이 배열 구조는 다음과 같이 설명될 수 있습니다:

          480: 이미지의 세로 크기 (픽셀 단위)
          640: 이미지의 가로 크기 (픽셀 단위)
          3: 각 픽셀에 대한 컬러 정보를 나타내는 채널 수, 여기서 3은 B, G, R 각각 한 개씩의 채널을 의미합니다.
  • 기능 설명: cv2.imshow는 지정된 이름의 창을 생성하고 해당 창에 이미지를 표시합니다. 이미지 처리 작업 후 결과를 시각적으로 확인할 때 사용됩니다. cv2.waitKey(0)와 함께 사용하여 이미지를 표시한 창이 바로 닫히지 않도록 합니다.

 

 

 

3. cv2.waitKey(delay)

이 함수는 키 입력을 기다립니다. 사용 방법은 아래와 같습니다:

  • delay: 키 입력을 기다리는 시간을 밀리초 단위로 나타내는 정수입니다.
    • 0: 무한정 키 입력을 기다리며 사용자가 키를 누를 때까지 대기합니다.
    • 양의 정수: 지정된 시간(ms) 동안 키 입력을 기다립니다.
  • 반환값: 사용자가 누른 키의 ASCII 코드 값을 반환합니다. 대기 시간 동안 키가 눌리지 않으면 -1을 반환합니다.
  • 기능 설명: cv2.imshow()로 이미지를 표시한 후, cv2.waitKey()를 호출하지 않으면 프로그램이 즉시 종료되고 이미지 창이 닫힙니다. 이를 방지하기 위해 이 함수를 사용해 창이 일정 시간 동안 또는 키 입력이 있을 때까지 유지되도록 합니다. 동영상 처리 시에는 각 프레임 사이에 지연을 주어 재생 속도를 조절합니다.

 

 

 

4. cv2.destroyAllWindows()

이 함수는 모든 OpenCV 창을 닫습니다. 사용 방법과 기능은 다음과 같습니다:

  • 기능 설명:
    • 모든 창 닫기: 현재 열려 있는 모든 OpenCV 창을 닫습니다.
    • 자원 해제: 창을 닫으면서 시스템에서 사용하고 있던 자원도 해제됩니다. 프로그램이 종료될 때 메모리 누수를 방지하는 데 도움을 줍니다.
  • 특정 창만 닫기: cv2.destroyWindow(winname) 함수를 사용하여 해당 이름의 창만 닫을 수 있습니다.

 

 

 

5. 이미지 저장

cv2.imwrite(save_file, img)      #파일로 저장, 포맷은 확장에 따름

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'인공지능...? > Open CV' 카테고리의 다른 글

[Open CV] 도형 그리기  (0) 2024.08.30