OpenCV 과제 #2

Tsi0511·2023년 8월 28일
0

OpneCV로 영상파일 읽기

바탕화면에 'openCV'라는 폴더생성


d

폴더 경로 복사


cd 폴더경로
jupyter notebook


폴더에 영상 추가


import cv2

# 영상 파일 경로 지정
video_path = '레킹볼.mp4'

# VideoCapture 객체 생성
cap = cv2.VideoCapture(video_path)

# 영상 파일이 정상적으로 열렸는지 확인
if not cap.isOpened():
    print("영상 파일을 열 수 없습니다.")
    exit()

# 프레임 반복
while True:
    # 프레임 읽기
    ret, frame = cap.read()

    # 읽은 프레임이 없으면 반복 종료
    if not ret:
        break

    # 읽은 프레임에 대한 처리 (예: 화면에 표시)
    cv2.imshow('Frame', frame)

    # 'q' 키를 누르면 반복 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 리소스 해제
cap.release()
cv2.destroyAllWindows()

영상 파일 경로는 같은 폴더내에 있으므로 걍 mp4파일명 그대로 적어주면 된다.

코드는 영상 파일을 열고 각 프레임을 읽어와서 화면에 표시하며,
'q' 키를 누를 때까지 종료된다.
반복이 종료되면 리소스를 해제하고 창을 닫는다.

2. 웹캠을 소스로 읽는 법

import cv2

# 웹캠 열기
cap = cv2.VideoCapture(0)  # 0번 카메라 (기본 웹캠)사용

# 웹캠이 정상적으로 열렸는지 확인
if not cap.isOpened():
    print("웹캠을 열 수 없습니다.")
    exit()

# 프레임 반복
while True:
    # 프레임 읽기
    ret, frame = cap.read()

    # 읽은 프레임에 대한 처리 (예: 화면에 표시)
    cv2.imshow('Webcam', frame)

    # 'q' 키를 누르면 반복 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 리소스 해제
cap.release()
cv2.destroyAllWindows()

만약 여러 개의 카메라가 연결되어 있다면 다른 번호를 사용하여
원하는 카메라를 선택할 수 있다. (ex: cap = cv2.VideoCapture(1))

3. 영상 쓰는 법

import cv2

# 저장할 영상의 해상도와 프레임 레이트 설정
frame_width = 640
frame_height = 480
fps = 30

# VideoWriter 객체 생성
out = cv2.VideoWriter('출력_영상_파일.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (frame_width, frame_height))

# 저장할 영상 생성 (프레임 반복)
for i in range(300):  # 300프레임 저장
    # 영상 프레임 생성 (임의의 이미지로 대체)
    frame = cv2.imread('프레임_이미지.jpg')

    # 프레임을 저장할 VideoWriter에 추가
    out.write(frame)

# VideoWriter와 연결된 리소스 해제
out.release()

위 코드에서는 VideoWriter 객체를 사용하여 영상을 저장한다.
cv2.VideoWriter 함수의 인자로는
출력 파일명, 코덱, 프레임 레이트 및 프레임의 크기 등이 있다.

for 루프에서는 영상을 생성하여 VideoWriter 객체에 추가하게 됩니다.
이때 실제로는 프레임을 생성하는 대신 웹캠이나 이미지에서 프레임을 읽어와서 저장하면 된다.

프레임 추가가 끝난 후 out.release()를 호출하여
VideoWriter와 관련된 리소스를 해제한다.

실행시키면 영상 파일이 폴더 내에 생긴다.

4. 영상을 흑백으로 바꿔서 출력하는 법

import cv2

# 영상 파일 경로 지정
video_path = '레킹볼.mp4'

# VideoCapture 객체 생성
cap = cv2.VideoCapture(video_path)

# 영상 파일이 정상적으로 열렸는지 확인
if not cap.isOpened():
    print("영상 파일을 열 수 없습니다.")
    exit()

# VideoWriter 객체 생성
output_path = '출력_영상_파일.mp4'
fps = int(cap.get(cv2.CAP_PROP_FPS))
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
out = cv2.VideoWriter(output_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (frame_width, frame_height), isColor=False)

# 프레임 반복
while True:
    # 프레임 읽기
    ret, frame = cap.read()

    # 읽은 프레임이 없으면 반복 종료
    if not ret:
        break

    # 영상을 흑백으로 변환
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 흑백으로 변환된 프레임을 출력 영상에 추가
    out.write(cv2.cvtColor(gray_frame, cv2.COLOR_GRAY2BGR))

    # 'q' 키를 누르면 반복 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 리소스 해제
cap.release()
out.release()
cv2.destroyAllWindows()

위 코드는 주어진 영상 파일을 열어 흑백으로 변환한 후, 흑백 영상을 출력용 영상에 저장한다.
변환된 흑백 영상은 다시 BGR 형식으로 변환되어 out.write() 함수에 추가됩니다.

profile
프론트 공부하는 중..

0개의 댓글

관련 채용 정보