我试图从我的物理摄像机发送一个视频到Python中的虚拟摄像机,这样我就可以在它上执行特定的效果。
到目前为止,这是我的代码:
import pyvirtualcam
import numpy as np
cam = pyvirtualcam.Camera(width=1280, height=720, fps=30)
cvCam = cv2.VideoCapture(0)
while True:
try:
_, frame = cvCam.read()
cam.send(frame)
cam.sleep_until_next_frame()
except KeyboardInterrupt:
cam.close()
cvCam.close()
break
print("Done")在运行这段代码之后,我发现了一个错误,即我还需要添加alpha通道。我从this文章中复制了一些代码。这是我的新代码,在代码中添加了alpha通道:
import pyvirtualcam
import numpy as np
cam = pyvirtualcam.Camera(width=1280, height=720, fps=30)
cvCam = cv2.VideoCapture(0)
while True:
_, frame = cvCam.read()
b_channel, g_channel, r_channel = cv2.split(frame)
alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 50
frame = cv2.merge((b_channel, g_channel, r_channel, alpha_channel))
cam.send(frame)
cam.sleep_until_next_frame()
print("Done")运行这段代码之后,它就会突然退出程序,而不会出现任何错误消息,即使它在while True循环中。我无法调试此问题。有什么问题吗?
发布于 2021-03-04 09:00:01
您可能与您的源与虚拟摄像机的帧大小不匹配。目前,这导致了一场硬性崩溃(也请参阅https://github.com/letmaik/pyvirtualcam/issues/17)。
解决方案是查询源摄像头的宽度和高度,并使用它初始化虚拟相机。webcam_filter.py示例https://github.com/letmaik/pyvirtualcam/blob/master/samples/webcam_filter.py展示了如何做到这一点。
大致如下:
cvCam = cv2.VideoCapture(0)
width = int(cvCam.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cvCam.get(cv2.CAP_PROP_FRAME_HEIGHT))
with pyvirtualcam.Camera(width=width, height=height, fps=30) as cam:
...https://stackoverflow.com/questions/66183781
复制相似问题