Shi*_*il 5 python opencv-python
有谁知道使用 python 创建相机源的方法?例如,我有 2 个摄像头:
每当我使用任何需要摄像头的 Web 应用程序或界面时,我都可以从上述两个选项中选择一个摄像头源。
我想要实现的是,我正在使用我自己的相机门户在我的 python 程序中处理实时帧,如下所示:
import numpy as np
import cv2
while True:
_,frame = self.cam.read()
k = cv2.waitKey(1)
if k & 0xFF == ord('q'):
self.cam.release()
cv2.destroyAllWindows()
break
else:
cv2.imshow("Frame",frame)
Run Code Online (Sandbox Code Playgroud)
现在我想将其frame用作相机源,因此下次每当我打开需要相机的软件或网络应用程序时,它都会显示如下选项:
有没有人对如何去做有任何建议或提示?我见过一些高级软件,它们生成自己的相机源,但它们是用 C++ 编写的。我想知道这是否会发生在 python 中。
这是一个相同的例子:
如您所见,那里有多个摄像机源。我想添加一个相机源,它在其提要中显示由 python 处理的帧。
您可以使用v4l2loopback ( https://github.com/umlaeute/v4l2loopback ) 来实现。它是用 C 编写的,但有一些 python 包装器。我使用过虚拟视频(https://github.com/Flashs/virtualvideo)。
virtualvideo README 非常简单,但这里是我对其 github 示例的修改,以符合您的目标:
import virtualvideo
import cv2
class MyVideoSource(virtualvideo.VideoSource):
def __init__(self):
self.cam = cv2.VideoCapture(0)
_, img = self.cam.read()
size = img.shape
#opencv's shape is y,x,channels
self._size = (size[1],size[0])
def img_size(self):
return self._size
def fps(self):
return 30
def generator(self):
while True:
_, img = self.cam.read()
yield img
vidsrc = MyVideoSource()
fvd = virtualvideo.FakeVideoDevice()
fvd.init_input(vidsrc)
fvd.init_output(2, 640, 480, pix_fmt='yuyv422')
fvd.run()
Run Code Online (Sandbox Code Playgroud)
在init_output中,第一个参数是我在添加内核模块时创建的虚拟相机资源:
sudo modprobe v4l2loopback video_nr=2 exclusive_caps=1
Run Code Online (Sandbox Code Playgroud)
最后一个参数是我的网络摄像头大小和像素格式。
您应该在环聊中看到此选项:
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |