我遇到了一个关于OpenCV透明覆盖层的问题。这是我目前的代码:
import cv2
cap = cv2.VideoCapture('Sample_Vid.mp4')
stat_overlay = cv2.imread('overlay.png')
fps = 21
if cap.isOpened():
while cap.isOpened():
ret, frame = cap.read()
overlay = frame.copy()
output = frame.copy()
cv2.rectangle(overlay, (0, 0), (730, 50), (0, 0, 0), -1)
cv2.putText(overlay, fps, (1230, 20), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255), 1)
cv2.addWeighted(overlay, 1.0, output, 0, 0, output)
cv2.imshow('frame', output)
所以我有一个矩形的框架,上面显示FPS。现在我想先覆盖我的stat_覆盖图像,然后是文本和形状,因为它们是动态的。在我阅读的每一个解释中,都有人告诉我用cv2.addWeighted(stat_overlay, 1.0, output, 0, 0, output)
来做,但是我已经有了一个类似于动态覆盖使用的命令,如果我在上面插入第二个命令,它就不起作用了。有什么办法解决这个问题吗
提前感谢您的回答
您正在使用的命令:
cv2.addWeighted(overlay, 1.0, output, 0, 0, output)
,使用了alpha = 1.0
和beta = 0
,因此没有透明度。您基本上是将
overlay
图像复制到output
图像中^{} documentation:
也可以使用以下代码覆盖文本:
对于覆盖
stat_overlay
,可以使用类似Alpha blending代码示例的解决方案我不知道
'overlay.png'
是RGB格式还是RGBA格式。如果图像具有alpha通道,则可以将其用作透明平面。
如果图像为RGB,则可以创建所需的alpha平面
如果
'overlay.png'
是一个小图像(如徽标),您可能不需要这些,您可以将小图像“放置”在output
图像上我创建了一个基于alpha blending示例的自包含代码示例。
为了使代码自包含,代码使用:
'overlay.png'
代码如下:
结果(最后一帧):
相关问题 更多 >
编程相关推荐