프레임에 대하여
동영상이라는 것은 여러 장의 '사진'을 1초 내에 여러 장을 출력시킴으로써 시청할 시, 연속적인 움직임을 보이도록 묘사하는 것입니다.
먼저 전체 코드와 출력 화면을 보여드리고 하나씩 설명드리겠습니다.
#-*_coding:utf-8-*-
import cv2
video = cv2.VideoCapture("cat2.mp4")
while video.isOpened():
check, frame = video.read()
if not check:
print("끝")
break
cv2.imshow("귀여운 고양이들",frame)
if cv2.waitKey(25) == ord('q'):
print("흑흑 종료")
break
video.release()
cv2.destroyAllWindows()
이미지 출력함수가 imshow 였다면, 동영상은 VideoCapture 입니다. (대문자,소문자 유의하세요!)
isOpened가 뭔가요?
영어 뜻 그대로 열려져 있다 입니다. 즉, video 변수가 열려져있는 동안 ~~ 를 반복해라! 라고 이해할 수 있겠습니다.
이건 단지 변수명입니다. 다만, 직관적으로 이해하기 쉽게 변수명을 ret,frame 혹은 check,frame이라고 합니다. 이 변수들이 하는 일을 설명드리겠습니다.
제 코드를 보면
if not check:
print("끝")
break
이렇게 나와있는데요. 만약 사진 송출이 끝났다면 "끝"을 출력하고 while문을 빠져나가도록 break를 걸었습니다.
그렇기 때문에 코드를 보면 cv2.imshow를 통해 받는 변수가 video가 아닌 frame입니다. 이 frame을 while문을 통해서 송출하는 것이기 때문입니다.
cv2.imshow("귀여운 고양이들",frame)
따라서 이러한 코드로 imshow를 받는 것입니다.
동영상 중지버튼은?
ord는 프레임이 끝나지 않았지만, 도중에 영상을 중단하고 나가고자 할 때, 하는 것입니다.
결과 화면
소스 코드
import cv2
webcam = cv2.VideoCapture(0) # 0번 카메라 (노트북의 경우 내장카메라)
if not webcam.isOpened():
exit()
while True:
check, frame = webcam.read()
mirror = cv2.flip(frame,2)
re_mirror = cv2.resize(mirror,dsize=(0,0),fx=0.5,fy=0.5,interpolation=cv2.INTER_AREA)
if not check:
break
cv2.imshow("webcam",re_mirror)
if cv2.waitKey(25) == ord('q'):
print("오 너가 끈거야")
break
re_mirror.release()
cv2.destroyAllWindows()
cv2.VideoCapture(0)
이것은 0번 카메라를 의미합니다. 0번은 만약 노트북을 사용하고 계시면 디폴트로 내장된 카메라를 가리킵니다. 추가로 다른 웹캠들도 설치하고 계시다면 1번, 2번 이런식으로 순서가 있을 것입니다.
저는 다른 웹캠은 없어서 0번을 적었고, 결과 화면처럼 나왔습니다.
(flip,resize는 뒤에서 다룰 것입니다.)
만약 True를 통해 무한반복을 하지않으면 웹캠은 실시간이 아니라, 실행 당시의 화면만 캡쳐된 상태로 뜹니다. 이 부분만 제외하면 나머진 다 똑같습니다.
근데 waitKey(25)에서 25가 의미하는게 뭔가요?
25가 1배속을 의미합니다.