实现目标:将视频中的指定部分去除,并用临近像素填充
1.滤波
import cv2
import numpy as np
#打开视频文件
cap = cv2.VideoCapture('intput.mp4')
# 获取视频的帧率、宽度和高度
fps = cap.get(cv2.CAP_PROP_FPS)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 定义视频编写器,用于保存处理后的视频
out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (frame_width, frame_height))
# 定义绿色的HSV范围
lower_green = np.array([55, 40, 40])
upper_green = np.array([85, 255, 255])
# lower_blue = np.array([75, 128, 128])
# upper_blue = np.array([170, 255, 255])
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 将帧从BGR转换为HSV颜色空间
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 创建掩码,找出绿色部分
mask = cv2.inRange(hsv, lower_green, upper_green)
# mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 通过掩码过滤帧,保留非绿色部分
filtered_frame = cv2.bitwise_and(frame, frame, mask=~mask)
# 写入处理后的帧
out.write(filtered_frame)
# 显示处理后的帧(可选)
cv2.imshow('Filtered Frame', filtered_frame)
# 检测键盘按键,如果按下 'q' 键则退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
2.填充
import cv2
import numpy as np
# 加载视频
video_capture = cv2.VideoCapture(r'output.mp4')
# 获取视频的基本信息
fps = int(video_capture.get(cv2.CAP_PROP_FPS))
width = int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 输出视频文件的设置
output_video = cv2.VideoWriter('output1.mp4',
cv2.VideoWriter_fourcc(*'mp4v'),
fps, (width, height))
# 逐帧处理视频
while True:
ret, frame = video_capture.read()
if not ret:
break
# 处理每一帧
# 这里简单示例,假设要替换绿色为白色(255, 255, 255)
green_pixels = np.where((frame[:, :, 1] < 10) & (frame[:, :, 0] < 10) & (frame[:, :, 2]< 10))
for y, x in zip(green_pixels[0], green_pixels[1]):
# 替换为临近像素(上下左右像素的平均值)
if y > 0:
frame[y, x] = frame[y - 10, x]
elif y < height - 1:
frame[y, x] = frame[y + 10, x]
elif x > 0:
frame[y, x] = frame[y, x - 10]
elif x < width - 1:
frame[y, x] = frame[y, x + 10]
else:
frame[y, x] = (100, 100, 100) # 如果没有临近像素可用,替换为
# 写入输出视频
output_video.write(frame)
# 释放资源
video_capture.release()
output_video.release()