opencv库处理视频(滤除指定颜色)

实现目标:将视频中的指定部分去除,并用临近像素填充

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值