以给视频中某个区域添加mask为例
import cv2
import numpy as np
def image_pre(img):
# binary mask
mask_threth = 50
coordinates = [[[200, 150], [250, 150], [250, 350], [200, 350]]]
coordinates = np.array(coordinates)
mask = np.zeros(img.shape[:2], dtype=np.int8)
mask = cv2.fillPoly(mask, coordinates, 255)
bbox_mask = (mask > mask_threth).astype(np.uint8)
# draw the masked image
color_mask = np.random.randint(0, 256, (1, 3), dtype=np.uint8)
color_mask = np.array([0, 0, 0], dtype=np.uint8)
bbox_mask = bbox_mask.astype(np.bool)
# img[bbox_mask] = img[bbox_mask] * 0.5 + color_mask * 0.5
img[bbox_mask] = img[bbox_mask] * 0 + color_mask
img = img[:, :, ::-1]
return img
cap = cv2.VideoCapture('pedestrian/pedestrian.mp4')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
fps =cap.get(cv2.CAP_PROP_FPS)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
out = cv2.VideoWriter('pedestrian/pedestrian_mask.mp4',fourcc, fps, size)
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
# frame = cv2.flip(frame,0)
frame = image_pre(frame)
out.write(frame)
cv2.imshow('frame',frame)
# 按q退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 按s暂停,再按任意键继续
if (cv2.waitKey(1) & 0xFF) == ord('s'):
cv2.waitKey(0)
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()