Notice
Recent Posts
Recent Comments
Link
거의 알고리즘 일기장
6. OpenCv_ 카메라, 동영상 처리하기 본문
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