[CV] cv2.imread()

2024. 9. 16. 14:31·Programming/DIP
728x90
728x90

cv2.imread()는 OpenCV에서 이미지를 파일로부터 읽어오는 함수.


Signature:

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

Parameters(매개변수):

  1. filename (string):
    • 읽어올 이미지 파일의 경로(Path).
    • 파일 경로는 절대 경로나 상대 경로를 사용할 수 있음.
    • 예: './image.jpg', '/home/cv/photo.png'
  2. flags (int, optional):
    • 이미지를 읽어올 때 적용할 옵션을 지정.
    • 기본값은 cv2.IMREAD_COLOR이며, 다른 값으로 설정하면 이미지를 읽어오는 방식이 달라짐.
    • 주요 옵션은 다음과 같음:
      • cv2.IMREAD_COLOR (기본값): 무조건 이미지를 3채널 컬러 이미지로 읽음 (BGR로 불러와짐), 1 에 해당
      • cv2.IMREAD_GRAYSCALE: 이미지를 1채널 그레이스케일 이미지로 읽음 (shape에서 channel이 없음), 0 에 해당
      • cv2.IMREAD_UNCHANGED: 이미지의 원본 그대로 로드. (알파 채널 포함 시 BGRA), -1 에 해당
      • cv2.IMREAD_ANYCOLOR: 가능한 한 이미지를 컬러로 로드 (원본의 컬러정보 존중하나 alpha는 무시됨).
      • cv2.IMREAD_ANYDEPTH: 일반적으로 이미지는 8비트 정수형(uint8)으로 로드하지만, 원본 이미지가 16비트 또는 32비트인 경우, 해당 비트 깊이를 유지하여 이미지를 로드.

파일의 경로(Path)에 대한 이해가 부족한 경우 다음 접은 글을 열어서 참고할 것.

더보기

2021.10.17 - [Computer/ETC] - Path (경로)

 

Path (경로)

파일 시스템 내에서 특정 파일(혹은 디렉토리)의 위치를 나타내는 문자열Absolute Path (절대 경로)현 작업디렉토리(cwd)와 관계없이 절대적 위치드라이브:\폴더\폴더\파일명 (Windows)c:\Windows\System32\dri

dsaint31.tistory.com


URL에 있는 이미지를 읽어들이는 방법은 다음 접은 글을 참고할 것.

더보기

2022.09.21 - [Programming/DIP] - [DIP] opencv에서 URL로 이미지 로딩

 

[DIP] opencv에서 URL로 이미지 로딩

OpenCV에서 URL로 이미지 로딩request 모듈을 활용하면 간단하게 URL에서 이미지 로딩이 된다.reauest로 url을 get메서드로 가져옴.request.content 는 immutable bytes이므로 이를 bytearray로 변경.해당 bytearray 객첼

dsaint31.tistory.com



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 객체 생성
    root.withdraw() # 창 숨김.
    w = root.winfo_screenwidth()  # 화면 너비 얻기
    h = root.winfo_screenheight()  # 화면 높이 얻기
    root.destroy()
    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()

설명:

  1. ds_imread() 함수:
    • 이 함수는 주어진 파일 경로로부터 이미지를 로드.
    • 기본 모드는 cv2.COLOR_RGB2BGR로 설정.
    • 만약 파일을 읽을 수 없을 경우, 오류 메시지를 출력하고 프로그램을 종료.
  2. ds_screen_size() 함수:
    • Tkinter 라이브러리를 이용해 현재 화면의 해상도(너비와 높이)를 반환.
    • 이 값은 이미지를 화면 중앙에 배치하는 데 사용됨.
  3. 메인 코드:
    • 현재 스크립트가 실행 중인 디렉토리에서 "cat_cv.tif"라는 이미지 파일을 로드.
    • ds_screen_size() 함수를 이용해 화면 크기를 얻고, cv2.moveWindow()를 사용하여 OpenCV 창을 화면 중앙에 배치함.
    • cv2.imshow()를 이용해 이미지를 창에 표시하고, ESC 키가 입력되거나 창이 닫힐 때까지 프로그램이 실행.
  4. 이미지 표시:
    • OpenCV 창의 이름을 '01'로 설정
    • 해당 창이 중앙에 위치하도록 이동.
    • 이미지를 창에 표시한 후, 사용자가 ESC 키를 누르거나 창을 닫으면 프로그램이 종료.

같이보면 좋은 자료들

2022.09.21 - [Programming/DIP] - [DIP] Color Space or Color Model

 

[DIP] Color Space or Color Model

Color Space(색 공간)은 "사람의 눈"이 3개의 color에 반응하는 감각세포(cone cell)를 통해 색을 인식하는 것에 기반하여 Tristimulus values (X,Y,Z)와 각각의 color를 연관시키는 방식처럼 "특정 공간의 위치"에

dsaint31.tistory.com

2022.07.14 - [Programming/DIP] - [OpenCV] cvtColor

 

[OpenCV] cv2.cvtColor

지원하는 color space 변경 flagsOpenCV의 경우, 다양한 color space를 지원함. Signature다음의 코드로 color space 변경이 가능함result_img = cv2.cvtColor(src_img, conversion_flag) 위와 같은 code를 통해 src_img를 다른 color

dsaint31.tistory.com

2023.04.07 - [Programming/DIP] - [OpenCV] imshow 창설정 및 종료 처리 (x버튼 처리)

 

[OpenCV] imshow 창설정 및 종료 처리 (x버튼 처리)

imshow 창설정 및 종료 처리 (x버튼 처리)창 설정 관련 arguments 및 options cv2.namedWindow를 통해 미리 창에 대한 title을 지정하여 놓을 수 있음.cv2.namedWindow('image', cv2.WINDOW_NORMAL)# Using resizeWindow() : Below cod

dsaint31.tistory.com


2024.09.22 - [Programming/DIP] - [DIP] Image 다루기: 기본편 1; (Summary)

 

[DIP] Image 다루기: cv2-기본편 1 (Summary)

openCV를 통한 이미지를 다루기 위한 기본 내용Pillow는 다음을 참고:https://ds31x.tistory.com/465 Pillow 사용법 - Basic 01Pillow 라이브러리의 기본적인 사용법을 다룬다. 2024.06.03 - [Python] - [Python] PIL, Pillow, Ope

dsaint31.tistory.com

 


 

 

'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
'Programming/DIP' 카테고리의 다른 글
  • [DIP] cv2.imwrite
  • [DIP] alpha 채널과 검은색 글씨 처리 with convertScaleAbs
  • [DIP] plt.imshow: matplotlib.pyplot
  • [DIP] cv2.imshow 사용예
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (748)
      • Private Life (13)
      • Programming (56)
        • DIP (112)
        • ML (26)
      • Computer (119)
        • CE (53)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (351)
        • Signals and Systems (103)
        • Math (172)
        • Linear Algebra (33)
        • Physics (42)
        • 인성세미나 (1)
      • 정리필요. (54)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (1)
        • PET Study 2009 (1)
        • 방사선 장해방호 (4)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    Probability
    인허가제도
    Term
    DIP
    fourier transform
    numpy
    linear algebra
    Optimization
    opencv
    SIGNAL
    signal_and_system
    Programming
    Vector
    Convolution
    Python
    math
    cv2
    function
    signals_and_systems
    SS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
[CV] cv2.imread()
상단으로

티스토리툴바