You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将摄像头采集的视频叠加到中间透明的自定义边框指定区域

实现摄像头画面嵌入自定义透明边框的方案

实现原理

利用OpenCV对带Alpha通道的PNG边框和摄像头采集帧进行像素级融合,将视频画面填充到边框中间透明区域,保留边框的非透明装饰部分。

前置准备

  • 将你需要使用的边框图片导出为带透明通道的PNG格式,存放到代码同级目录,命名为border.png
  • 提前确认边框中间透明区域的坐标和尺寸(可通过画图工具打开边框图片查看像素位置)

代码修改步骤

你只需要修改原有代码中mode == "display"分支下的内容即可,具体修改点如下:

1. 新增边框加载逻辑

在启动摄像头cap = cv2.VideoCapture(1)的代码前,添加边框加载和预处理代码:

# 加载带透明通道的自定义边框
border = cv2.imread('border.png', cv2.IMREAD_UNCHANGED)
# 统一边框的输出尺寸和原代码的显示尺寸一致:1600*960
border = cv2.resize(border, (1600, 960), interpolation=cv2.INTER_CUBIC)
# 拆分边框的BGR色彩通道和alpha透明通道
border_bgr = border[:,:,0:3]
border_alpha = border[:,:,3]/255.0 # 透明值归一化到0-1范围
# 配置边框中间透明区域的坐标,需根据你的实际边框调整
# 参数说明:roi_x=区域左上角x坐标,roi_y=区域左上角y坐标,roi_w=区域宽度,roi_h=区域高度
roi_x, roi_y, roi_w, roi_h = 150, 80, 1300, 800

2. 替换画面显示逻辑

把原循环末尾的画面显示代码:

cv2.imshow('Video', cv2.resize(frame,(1600,960),interpolation = cv2.INTER_CUBIC))

替换为帧融合逻辑:

# 将采集到的视频帧resize到匹配透明区域的尺寸
frame_resized = cv2.resize(frame, (roi_w, roi_h), interpolation=cv2.INTER_CUBIC)
# 创建输出画布
output = border_bgr.copy()
# 融合透明区域的视频帧和边框
roi_output = output[roi_y:roi_y+roi_h, roi_x:roi_x+roi_w]
roi_alpha = border_alpha[roi_y:roi_y+roi_h, roi_x:roi_x+roi_w, None]
output[roi_y:roi_y+roi_h, roi_x:roi_x+roi_w] = frame_resized * (1 - roi_alpha) + roi_output * roi_alpha
# 非透明区域直接使用边框内容
output[border_alpha == 1] = border_bgr[border_alpha == 1]
# 显示最终融合后的画面
cv2.imshow('Video', output)

注意事项

  • 若边框透明区域的位置和尺寸匹配不对,可自行调整roi_x, roi_y, roi_w, roi_h四个参数直到视频画面完全嵌入透明区域
  • 若视频画面出现拉伸变形,可调整roi_w和roi_h的比例和你的摄像头输出比例保持一致即可
  • 确保你的边框图片为带透明通道的PNG格式,JPG格式无透明通道无法实现该效果

内容的提问来源于stack exchange,提问作者angel_30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:45:04