안드로이드/안드로이드 with Java
Opencv Python - 3. 동영상 다루기
닥스훈스
2019. 9. 3. 14:48
카메라로부터 영상 가져오기
파이썬 파일을 생성하여 다음 코드를 작성한다.
import cv2
#비디오의 개수만큼 객체 생성
cap = cv2.VideoCapture(0)
#카메라로부터 이미지 한장을 가져옴
ret, img_color = cap.read()
cv2.imshow("Color", img_color)
#아무키나 누르기 전까지 대기
cv2.waitKey(0)
#자원 메모리 해제
cap.release()
cv2.destroyAllWindows()
다음과 같이 한장의 캡쳐 파일이 나타난다.
동영상 처럼 보이게 하기 위해서는 화면에 보여지는 처리를 반복해주면 된다.
import cv2
#비디오의 개수만큼 객체 생성
cap = cv2.VideoCapture(0)
#esc키를 누르면 무한루프에서 빠져나옴
while(True):
ret, img_color = cap.read()
#캡쳐가 되지 않은 경우 다시 루프 처음부터 실행하도록
if ret == False:
continue
cv2.imshow("Color", img_color)
#키보드 입력을 받기 위해서 대기시간 1초 줌
if cv2.waitKey(1)&0xFF == 27:
break
#아무키나 누르기 전까지 대기
cv2.waitKey(0)
#자원 메모리 해제
cap.release()
cv2.destroyAllWindows()
카메라 영상 저장하기
프레임수는 일반적으로 30이며 영상이 1초에 30장의 이미지를 가져올 수 있다는 의미이다.
import cv2
#비디오의 개수만큼 객체 생성
cap = cv2.VideoCapture(0)
#코덱 지정
fourcc = cv2.VideoWriter_fourcc(* 'XVID')
#(저장될 동영상 파일 이름, 코덱, 영상의 초당 프레임수, 이미지 크기 캡쳐되는 이미지와 일치시키기)
writer = cv2.VideoWriter('output.avi', fourcc, 30.0, (640, 480))
#esc키를 누르면 무한루프에서 빠져나옴
while(True):
ret, img_color = cap.read()
#캡쳐가 되지 않은 경우 다시 루프 처음부터 실행하도록
if ret == False:
continue
cv2.imshow("Color", img_color)
#이미지를 반복해서 저장
writer.write(img_color)
#키보드 입력을 받기 위해서 대기시간 1초 줌
if cv2.waitKey(1)&0xFF == 27:
break
#아무키나 누르기 전까지 대기
cv2.waitKey(0)
#자원 메모리 해제
cap.release()
writer.release()
cv2.destroyAllWindows()
영상 실행 후 ESC키를 누르면 영상이 종료되고 다음과 같이 파일로 저장된다.
영상파일에서 오른쪽 클릭 후, Show in Explorer를 선택한다.
영상을 열면 재생됨을 확인할 수 있다.
동영상 파일 재생하기
재생할 영상을 불러온 후, 영상이 끝까지 재생되면 무한루프에서 빠져나오도록 조건문을 걸어준다.
import cv2
#재생할 동영상 파일
cap = cv2.VideoCapture('output.avi')
fourcc = cv2.VideoWriter_fourcc(* 'XVID')
while(True):
ret, img_color = cap.read()
#동영상을 끝까지 재생하면 무한루프에서 빠져나옴
if ret == False:
break
cv2.imshow("Color", img_color)
#키보드 입력을 받기 위해서 대기시간 1초 줌
if cv2.waitKey(1)&0xFF == 27:
break
#자원 메모리 해제
cap.release()
cv2.destroyAllWindows()