windows 如何通过虚拟摄像机将OpenCV视频源发送到Python?

sy5wg1nm  于 2023-02-16  发布在  Windows
关注(0)|答案(1)|浏览(288)

我正在尝试将一个视频源从我的物理摄像机发送到Python中的虚拟摄像机,这样我就可以对它执行某些效果。
这是我的代码:

  1. import pyvirtualcam
  2. import numpy as np
  3. cam = pyvirtualcam.Camera(width=1280, height=720, fps=30)
  4. cvCam = cv2.VideoCapture(0)
  5. while True:
  6. try:
  7. _, frame = cvCam.read()
  8. cam.send(frame)
  9. cam.sleep_until_next_frame()
  10. except KeyboardInterrupt:
  11. cam.close()
  12. cvCam.close()
  13. break
  14. print("Done")

在我运行这段代码之后,我得到一个错误,说我还需要添加一个alpha通道。我从this post复制了一些代码。这是我的新代码,添加了一个alpha通道到代码:

  1. import pyvirtualcam
  2. import numpy as np
  3. cam = pyvirtualcam.Camera(width=1280, height=720, fps=30)
  4. cvCam = cv2.VideoCapture(0)
  5. while True:
  6. _, frame = cvCam.read()
  7. b_channel, g_channel, r_channel = cv2.split(frame)
  8. alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 50
  9. frame = cv2.merge((b_channel, g_channel, r_channel, alpha_channel))
  10. cam.send(frame)
  11. cam.sleep_until_next_frame()
  12. print("Done")

运行完这段代码后,它突然退出程序,没有任何错误信息,即使它是在一个while True循环中。我无法调试这个问题。* 什么问题?*

ngynwnxp

ngynwnxp1#

你可能有不匹配的帧大小从你的源与虚拟凸轮。目前这导致一个硬崩溃(另见https://github.com/letmaik/pyvirtualcam/issues/17)。
解决方案是查询源网络摄像头的宽度和高度,并使用它们来初始化虚拟摄像头,https://github.com/letmaik/pyvirtualcam/blob/main/examples/webcam_filter.py中的webcam_filter.py示例显示了如何完成此操作。
大致如下:

  1. cvCam = cv2.VideoCapture(0)
  2. width = int(cvCam.get(cv2.CAP_PROP_FRAME_WIDTH))
  3. height = int(cvCam.get(cv2.CAP_PROP_FRAME_HEIGHT))
  4. with pyvirtualcam.Camera(width=width, height=height, fps=30) as cam:
  5. ...

相关问题