OpenCV 영상 읽기/쓰기 및 동영상 스트리밍

minho-log·2026년 3월 30일

OpenCV

목록 보기
1/3

<공부 주제>

OpenCV를 이용한 정지 영상 및 동영상 데이터의 입출력 프로세스 이해

<공부한 내용 정리>

영상 처리는 결국 데이터를 읽어와서(Input), 가공하고, 다시 보여주거나 저장하는(Output) 과정의 반복이다. 특히 동영상은 아주 빠른 속도로 정지 영상을 연속해서 보여주는 것이 핵심이다.

  1. 정지 영상 (Image)

cv2.imread(filename, flags): 파일을 읽어 행렬(numpy.ndarray)로 반환한다.

cv2.imshow(title, image): 특정 윈도우 창에 영상을 출력한다.

cv2.imwrite(filename, image): 가공된 행렬 데이터를 파일로 저장한다.

  1. 동영상 및 카메라 (Video/Webcam)

cv2.VideoCapture(): 카메라 장치나 동영상 파일을 연다. (보통 웹캠은 0번 사용)

프레임(Frame): 동영상을 구성하는 한 장 한 장의 정지 영상.

cap.read(): 카메라로부터 한 프레임씩 읽어온다

<예제 / 실습 코드>

웹캠 영상을 실시간으로 읽어와서 화면에 출력하고 종료하는 실습.

  1. 웹캠 스트리밍 코드 (webcam_test.py)

Python

import cv2

# 0번 카메라 장치 열기
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("카메라를 열 수 없습니다.")
    exit()

# 카메라 속성 출력 (가로, 세로 크기)
print('Width:', cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print('Height:', cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

while True:
    # 한 프레임씩 읽기 (ret: 성공여부, frame: 이미지 데이터)
    ret, frame = cap.read()
    
    if not ret:
        break

    # 영상을 화면에 표시
    cv2.imshow('Webcam View', frame)

    # 1ms 대기, 'q' 키를 누르면 루프 탈출
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 자원 해제
cap.release()
cv2.destroyAllWindows()

<헷갈렸던 점>

cap.isOpened() 체크: 카메라가 다른 프로그램에서 사용 중이거나 연결이 불량하면 에러 없이 빈 화면만 나올 수 있다. 반드시 초기 오픈 여부를 확인하는 습관이 중요하다.

waitKey(1)의 중요성: 동영상 출력 시 waitKey 값이 너무 크면 슬로우 모션이 되고, 너무 작으면 CPU 점유율이 치솟는다. 보통 실시간 처리를 위해 1 또는 10 정도를 사용한다는 점을 배웠다.

<오늘의 정리>

영상 입출력의 기본 함수는 imread, imshow, imwrite이다.

동영상은 VideoCapture 객체를 통해 While 루프 안에서 프레임 단위로 처리한다.

작업이 끝나면 반드시 release()를 호출하여 카메라 자원을 반납해야 한다.

profile
개발 공부를 하며 직접 부딪히고 공부한 것을 기록합니다.

0개의 댓글