# cv2.VideoCapture(index/filename, apiPreference=None) -> retval# index: camera_id or filename# apiPreference=None# cv2.VideoWriter(filename, fourcc, fps, framesize, isColor=None) -> retval# filename: 저장할 이름# fourcc: cv2.VideoWriter_fourcc(*'DIVX') 를 사용# fps: 초당 프레임 수 e.g. 30# frameSize: 프레임 크기 e.g., [640, 480])# isColor: Color 영상
# cap = cv2.VideoCapture("./fig/PETS2000.avi")cap = cv2.VideoCapture(Path(folder, "PETS2000.avi"))if not cap.isOpened(): print("Video open failed") sys.exit()ret, background = cap.read()background_gray = cv2.cvtColor(background, cv2.COLOR_BGR2GRAY)background_gray_G = cv2.GaussianBlur(background_gray, (0, 0), 1.) # cv2.imshow("background", background)# cv2.waitKey()while True: ret, frame = cap.read() # fps: frame per second if not ret: break frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) frame_gray_G = cv2.GaussianBlur(frame_gray, (0, 0), 1.) diff_G = cv2.absdiff(frame_gray_G, background_gray_G) ret_g, mask_g = cv2.threshold(diff_G, 50, 255, cv2.THRESH_BINARY) cnts, labels, stats, centroids = cv2.connectedComponentsWithStats(mask_g) for i in range(1, cnts): x, y, w, h, area = stats[i] if area <= 200: continue cv2.rectangle(frame, (x, y, w, h), (0, 0, 255), 2) cv2.imshow("frame", frame) cv2.imshow("diff", diff_G) cv2.imshow("mask_g", mask_g) if cv2.waitKey(20) == 27: breakcv2.destroyAllWindows()cap.release()
## 이동 평균 배경 차분cap = cv2.VideoCapture(Path(folder, "PETS2000.avi"))if not cap.isOpened(): print("Video open failed") sys.exit()ret, back = cap.read()back = cv2.cvtColor(back, cv2.COLOR_BGR2GRAY)back = cv2.GaussianBlur(back, (0, 0), 1.)fback = back.astype(np.float32)while True: ret, frame = cap.read() if not ret: print("frame is None") break frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) frame_gray = cv2.GaussianBlur(frame_gray, (0, 0), 1) cv2.accumulateWeighted(frame_gray, fback, 0.01) back = fback.astype(np.uint8) diff = cv2.absdiff(frame_gray, back) ret, mask = cv2.threshold(diff, 50, 255, cv2.THRESH_BINARY) cnts, labels, stats, centroids = cv2.connectedComponentsWithStats(mask) for i in range(1, cnts): x, y, w, h, area = stats[i] if area < 100: continue cv2.rectangle(frame, (x, y, w, h), (0, 0, 255), 2) cv2.imshow("frame",frame) cv2.imshow("mask",mask) cv2.imshow("back",back) if cv2.waitKey(20) == ord("q"): breakcv2.destroyAllWindows()cap.release()
Webcam 열기
# 카메라 열기cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)# cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)# cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)# cap.set(cv2.CAP_PROP_FPS, 30)# cap = cv2.VideoCapture('raining.mp4')if not cap.isOpened(): #True or Falose print("Camera open failed") cap.release() sys.exit()# 카메라 프레임 크기 출력print('Frame width:', int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))print('Frame height:', int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))# 카메라 프레임 처리while True: ret, frame = cap.read() if not ret: break edge = cv2.Canny(frame, 50, 150) # inversed = ~frame # 반전 cv2.imshow('frame', frame) cv2.imshow('frame1', edge)# cv2.imshow('inversed', inversed) if cv2.waitKey(10) == 27: breakcv2.destroyAllWindows()
Frame width: 640
Frame height: 480
동영상 저장
# cv2.VideoWriter(filename, fourcc, fps, framesize, isColor=None) -> retval# filename: 저장할 이름# fourcc: cv2.VideoWriter_fourcc(*'DIVX') 를 사용# fps: 초당 프레임 수 e.g. 30# frameSize: 프레임 크기 e.g., [640, 480])# isColor: Color 영상
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)if not cap.isOpened(): print("Camera open failed!") sys.exit()# cap.get(cv2.CAP_PROP_FRAME_WIDTH) -> float type 반환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) # Frame per secondfps = 30# fourcc = cv2.VideoWriter_fourcc(*'MJPG')fourcc = cv2.VideoWriter_fourcc(*'DIVX') # fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X') # *'DIVX' delay = round(1000 / fps) #frame 간 시간 간격, ms 단위out = cv2.VideoWriter('output.avi', fourcc, fps, (w, h), isColor = True)if not out.isOpened(): print('File open failed!') cap.release() sys.exit()while True: ret, frame = cap.read() if not ret: break# inversed = ~frame# edge = cv2.Canny(frame, 50, 150)# edge_color = cv2.cvtColor(edge, cv2.COLOR_GRAY2BGR) out.write(frame) #소리는 capture가 안됨# out.write(inversed)# out.write(edge_color) cv2.imshow('frame', frame)# cv2.imshow('inversed', inversed)# cv2.imshow('edge', edge) if cv2.waitKey(delay) == 27: breakout.release()cv2.destroyAllWindows()