• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    해결됨

resize 동영상 크기 조정 오류

23.08.23 16:19 작성 조회수 193

0

# 동영상 고정 크기로 설정
import cv2
cap = cv2.VideoCapture('video.mp4')

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
        
    frame_resized = cv2.resize(frame, (400, 500))
    cv2.imshow('video', frame_resized)
    if cv2.waitKey(1) == ord('q'):
        break
        
    cap.release()
    cv2.destroyAllWindows()
    #cv2.waitKey(1)
# 동영상 비율 크기로 설정
import cv2
cap = cv2.VideoCapture('video.mp4')

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
        
    frame_resized = cv2.resize(frame, None, fx = 1.5, fy = 1.5, interpolation = cv2.INTER_CUBIC)
    cv2.imshow('video', frame_resized)
    if cv2.waitKey(1) == ord('q'):
        break
        
    cap.release()
    cv2.destroyAllWindows()
    #cv2.waitKey(1)

 

Mac OS 사용자 입니다. 마지막 'cv2.waitKey(1)' 코드는 맥의 경우 해당 코드를 추가하지 않았을 때에 python 출력 창이 닫히지를 않아 추가하게 된 코드입니다.

cv2.waitKey(1) 추가 -> 실행 시, 출력 영상의 창이 1초 떴다가 사라짐 / 오류 코드 안 뜸

cv2.waitKey(1) 삭제 -> 실행 시, 출력 영상의 창이 아예 안 뜸 / 오류 코드 안 뜸

 

강의 속 강사 님처럼 비율 조정이 된 영상이 정상적으로 출력이 되어야 하는데 저는 그렇지 않아서 혹시 해결방법을 아시는 분이 계실까 질문 해봅니다...ㅠㅠ 오류 코드도 안 뜨고 실행은 되는데 보여져야 할 출력 영상이 보이지 않아 답답합니다... 도와주세요

답변 1

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.24

안녕하세요, 인프런 AI 인턴이에요.

resize 함수를 사용하여 동영상 크기를 조정하는 코드를 작성하셨는데, 영상이 제대로 출력되지 않는 문제가 있으시군요.

첫 번째 코드에서는 동영상을 고정 크기로 설정하기 위해 cv2.resize 함수의 두 번째 인자에 (400, 500)을 전달하셨습니다. 이 코드에는 크기 조정에 관련된 오류는 없어 보입니다.

두 번째 코드에서는 비율을 유지한 채로 동영상 크기를 조정하기 위해 cv2.resize 함수의 세 번째와 네 번째 인자에 각각 1.5를 전달하셨습니다. 또한, 보간법으로 cv2.INTER_CUBIC을 사용하셨습니다. 이 코드에도 크기 조정에 관련된 오류는 없어 보입니다.

문제가 발생할 가능성이 있는 부분은 동영상을 재생하는 while 문 안에 cap.release()와 cv2.destroyAllWindows() 함수를 포함하셨다는 점입니다. 이 함수들은 while 문 밖에서 호출해야 정상적으로 동작합니다. 따라서, 아래와 같이 코드를 수정해보세요.

import cv2
cap = cv2.VideoCapture('video.mp4')

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
        
    frame_resized = cv2.resize(frame, (400, 500))
    cv2.imshow('video', frame_resized)
    if cv2.waitKey(1) == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

위의 코드에서는 cv2.waitKey(1) 함수를 통해 1초마다 키 입력을 처리하고, ‘q’를 누르면 while 문을 탈출합니다. 동영상 재생 후에는 cap.release()와 cv2.destroyAllWindows()를 호출하여 리소스를 해제하고 창을 닫습니다.

만약 이 방법으로도 문제가 해결되지 않는다면, 새로운 오류 메시지나 추가 정보를 제공해주시면 더 정확한 답변을 드릴 수 있을 것 같아요.