python - 镜像并输出为网络摄像头
问题描述
我想用 Python 编写一个简单的程序,它使用 pyvirtualcam 和 OBS 虚拟摄像头,它只是从网络摄像头获取图像并将其镜像输出到 OBS 虚拟摄像头。可悲的是,我不知道如何将图像从 cv2 转换为 RGBA NP 阵列。这是我的代码:
import cv2
import pyvirtualcam
import numpy as np
cap = cv2.VideoCapture(0)
cv2.namedWindow('frame',cv2.WINDOW_NORMAL)
cv2.resizeWindow('frame', 800,800)
with pyvirtualcam.Camera(width=1280, height=720, fps=30) as cam:
while(cap.isOpened()):
ret, frame = cap.read()
print(frame.shape)
cv2.imshow('frame',frame)
cam.send(frame)
cam.sleep_until_next_frame()
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我得到这个错误:
Traceback (most recent call last):
File "C:/Users/Ditin2/Desktop/test_cam.py", line 33, in <module>
cam.send(frame)
File "C:\Users\Ditin2\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pyvirtualcam\camera.py", line 94, in send
_native_windows.send(frame)
RuntimeError: frame must have 4 channels (rgba)
解决方案
假设frame
是 RGB 格式,您可以使用以下方法转换为 RGBA:
rgba = cv2.cvtColor(frame, cv2.COLOR_RGB2RGBA)
请注意,如果frame
在 BGR 中,我怀疑它是(我很确定 cap.read() 在 BGR 中返回图像),您将需要使用:
rgba = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
推荐阅读
- c# - ASP.NET Core 模型未通过 AJAX 绑定到控制器
- java - 无法在 if 语句中向变量添加数字
- ios - 设置应用程序图标时出错
- python - 龙卷风等待未来对象解决
- angular - 在完成视频角 4 时显示一个 div
- python - 如何摆脱 Python 代码中的嵌套 for 循环?
- c# - 在 c# 中是否可以访问只有属性值的类实例?
- reactjs - 带有 React Router V4 的 ReactJS 的 Apache 配置
- javascript - 为什么 Webpack 4 不创建 dist 文件夹,而 webpack 2 却创建?
- c# - C# 自定义功能区错误