거의 알고리즘 일기장

6. OpenCv_ 카메라, 동영상 처리하기 본문

카테고리 없음

6. OpenCv_ 카메라, 동영상 처리하기

건우권 2020. 9. 21. 20:03

1. 카메라, 동영상 열기

import sys
import cv2

# 카메라 열기
#cap = cv2.VideoCapture()
#cap.open(0)

#위의 두줄과 같음
#cap = cv2.VideoCapture(0)

#vidoe 열기
cap = cv2.VideoCapture("video1.mp4")

if not cap.isOpened():
    print("camera/video open failed!")
    sys.exit()

#속성 받아오기
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(w, h)

#영상 출력 속성을 바꿀수도 있음, 지원이 안될경우 안바뀔수도 있으니 확인할것!
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 360)

while True:
    #현재 카메라의 프레임을 받아옴
    ret, frame = cap.read()

    #정상적으로 받아왔는지 확인
    #동영상의 경우 마지막 프레임일때 여기 자연스레 걸림
    if not ret:
        break

    #윤곽선만 따기
    edge = cv2.Canny(frame, 50, 150)

    cv2.imshow("frame", frame)
    cv2.imshow("edge", edge)
    if cv2.waitKey(20) == 27:   #esc
        break

cap.release()
cv2.destroyAllWindows()

2. 영상 저장

import sys
import cv2

#카메라 열기
cap = cv2.VideoCapture(0)

#방어코드
if not cap.isOpened():
    print("Camera open failed!")
    sys.exit()

#가로크기 세로크기와 fps값 불러오기
w = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)

#코덱, delay는 시간간격 계산한것
fourcc = cv2.VideoWriter_fourcc(*'DIVX') # *'DIVX' == 'D', 'I', 'V', 'X'
delay = round(1000 / fps)

#비디오 만들기
out = cv2.VideoWriter('output.avi', fourcc, fps, (w, h))

#방어코드
if not out.isOpened():
    print('File open failed!')
    cap.release()
    sys.exit()

while True:
    ret, frame = cap.read()

    if not ret:
        break

    inversed = ~frame
    #grayscale이므로 영상저장을 하려면 write속성을 바꾸던가
    #밑에처럼 3채널로 바꿔주면 저장 가능!
    edge = cv2.Canny(frame, 50, 150)
    edge_color = cv2.cvtColor(edge, cv2.COLOR_GRAY2BGR)

    out.write(edge_color)

    cv2.imshow('frame', edge)
    cv2.imshow('inversed', inversed)

    if cv2.waitKey(delay) == 27:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
반응형
Comments