전에 다뤘던 내용은 이미지에 관한 내용이였다.
이제 영상으로 넘어가보도록 하겠다.
import cv2
cap = cv2.VideoCapture('video.mp4')
먼저 이미지 파일을 불러와서 변수에 넣어준다.
그리고 영상이 잘 열렸는지 계속 확인을 하기 위해서 isOpened 라는 것을
이용하여서 와일문을 돌려 준다.
while cap.isOpened():
자 그럼 이제 와일문 안에는 어떤 것이 들어가야 할까?
1. ret , 2. 사용자 입력이 들어가야 한다.
ret : 성공 여부를 확인
frame : 받아온 이미지
만약 파일이 손상되었거나 경로가 잘못되어서 파일이 열리지 않는다면
ret 에서 에러가 날 것이다.
그러니 ret는 와일문 안에 넣어주어야 하고 영상 또한 중간에 끌 수 있도록 해야하기 때문에 사용자 입력을 넣어준다.
그럼 코드가 이렇게 된다.
while cap.isOpened(): # 동영상 파일이 올바로 열렸는지
ret, frame = cap.read() # ret : 성공 여부, frame : 받아온 이미지 (프레임)
if not ret :
print('더 이상 가져올 프레임이 없음')
break
cv2.imshow('video', frame)
if cv2.waitKey(25) == ord('q'): # waitKey 안의 값을 조정하면 영상의 속도가 달라짐
print('사용자 입력에 의해 종료 . . .')
break
마지막에는 이 코드도 무조건 넣어주어야 한다.
cap.release() # 자원 해제
cv2.destroyAllWindows() # 모든 창 닫기
실행 :
캡쳐본이라서 사진이 움직이지는 않지만 정말 잘 나온다.
또한 동영상이 된다면 코드를 조금 수정해서 노트북의 캠도 사용할 수 있다.
cap = cv2.VideoCapture(0) # 0번째 카메라 장치 (Device ID)
if not cap.isOpened(): # 카메라가 잘 열리지 않은 경우
exit() # 프로그램 종료
while cap.isOpened(): # 동영상 파일이 올바로 열렸는지
ret, frame = cap.read() # ret : 성공 여부, frame : 받아온 이미지 (프레임)
if not ret :
break
cv2.imshow('camera', frame)
if cv2.waitKey(25) == ord('q'): # waitKey 안의 값을 조정하면 영상의 속도가 달라짐
print('사용자 입력에 의해 종료 . . .')
break
cap.release() # 자원 해제
cv2.destroyAllWindows() # 모든 창 닫기
실행 :