본문 바로가기
AI, 논문, 데이터 분석

[OpenCV] 인터페이스 (디지털 영상 처리)

by doraemin_dev 2025. 1. 21.

[실습1] 비디오 처리 - 카메라에서 프레임 읽기

 

코드 :

import cv2

def display_info(frame, text, pt, value, color=(120, 200, 90)): 
    text += str(value)
    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(frame, text, pt, font, 0.7, color, 2)


capture = cv2.VideoCapture(0)  # 0번 카메라 연결
if capture.isOpened() == False:
    raise Exception("카메라 연결 안됨")

# 카메라 속성 획득 및 출력
# print("너비 %d" % capture.get())
# print("높이 %d" % capture.get())
# print("노출 %d" % capture.get())
# print("밝기 %d" % capture.get())
# 카메라 속성 획득 및 출력
print("너비 %d" % capture.get(cv2.CAP_PROP_FRAME_WIDTH))
print("높이 %d" % capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
print("노출 %d" % capture.get(cv2.CAP_PROP_EXPOSURE))
print("밝기 %d" % capture.get(cv2.CAP_PROP_BRIGHTNESS))
print("대비 %d" % capture.get(cv2.CAP_PROP_CONTRAST))
print("채도 %d" % capture.get(cv2.CAP_PROP_SATURATION))

while True:  # 무한 반복
    ret, frame = capture.read() # 카메라 영상 받기
    if not ret:
        break
    if cv2.waitKey(30) >= 0:
        break
    brightness = capture.get(cv2.CAP_PROP_BRIGHTNESS)
    contrast = capture.get(cv2.CAP_PROP_CONTRAST)
    saturation = capture.get(cv2.CAP_PROP_SATURATION)
    display_info(frame, "BRIGHTNESS: ", (10, 40), brightness)
    display_info(frame, "CONTRAST: ", (10, 70), contrast)
    display_info(frame, "SATURATION: ", (10, 100), saturation)

    title = "View Frame from Camera"
    cv2.imshow(title, frame)  # 윈도우에 영상 띄우기
capture.release()
cv2.destroyAllWindows() # 모든 열린 윈도우 닫기

 

 

실행 :

PS C:\Users\032\SKT_AI\chap04> python 17.read_pccamera.py
너비 640
높이 480
노출 -5
밝기 0
대비 50
채도 64
Traceback (most recent call last):
  File "C:\Users\032\SKT_AI\chap04\17.read_pccamera.py", line 30, in <module>
    if cv2.waitKey(30) >= 0:
       ~~~~~~~~~~~^^^^
KeyboardInterrupt

PS C:\Users\032\SKT_AI\chap04>

 


[실습2] 비디오 처리 - 동영상 파일 읽기

 

코드 : 

import cv2
from Common.utils import put_string

# 동영상 파일 열기
capture = cv2.VideoCapture(r"C:\Users\032\SKT_AI\chap04\수업중2.mp4")
if not capture.isOpened():
    raise Exception("동영상 파일 개방 안됨")

# 동영상 정보 가져오기
frame_width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
frame_rate = capture.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 코덱 설정 (MP4 형식)

# 출력 동영상 설정
output_path = r"C:\Users\032\SKT_AI\chap04\수업중_편집본.mp4"
writer = cv2.VideoWriter(output_path, fourcc, frame_rate, (frame_width, frame_height))

frame_cnt = 0  # 현재 프레임 번호
delay = int(1000 / frame_rate)  # 지연 시간

while True:
    ret, frame = capture.read()
    if not ret or cv2.waitKey(delay) >= 0:
        break

    blue, green, red = cv2.split(frame)
    frame_cnt += 1

    # 특정 프레임 범위에서 색상 조정
    if 100 <= frame_cnt < 200:
        cv2.add(blue, 100, blue)
    elif 200 <= frame_cnt < 300:
        cv2.add(green, 100, green)
    elif 300 <= frame_cnt < 400:
        cv2.add(red, 100, red)

    # 단일채널 영상 합성
    frame = cv2.merge([blue, green, red])

    # 프레임 번호 출력
    put_string(frame, "frame_cnt : ", (20, 320), frame_cnt)

    # 동영상 출력 및 저장
    cv2.imshow("Read Video File", frame)
    writer.write(frame)  # 저장

# 자원 해제
capture.release()
writer.release()
cv2.destroyAllWindows()

 

 

실행 : 

PS C:\Users\032\SKT_AI\chap04> python 20.read_video_file.py