以编程方式选择相机

3

我的程序应该选择三个相机,并对每个相机拍照。

目前我有以下代码:

def getCamera(camera):
    graph = FilterGraph()
    print("Camera List: ")
    print(graph.get_input_devices())

    #tbd get right Camera

    try:
        device = graph.get_input_devices().index("HD Pro Webcam C920")
    except ValueError as e:
        device = graph.get_input_devices().index("Integrated Webcam")
    return device

上述代码运行良好。但是我有三个相同名称的相机。

输出结果如下:

graph = FilterGraph()
print("Camera List: ")
print(graph.get_input_devices())

这是一个包含三个相同名称摄像头的列表。我以为它们在一个数组中,可以用以下方式选择它们:

device = graph.get_input_devices().index(0) 

像任何其他数组一样。

但我只能通过名称访问。就像第一个代码示例中一样。

我如何使用索引访问相机?


如果您标记或提及FilterGraph来自哪个库,可能会更有帮助。 - Michael Butscher
由于您说可以通过名称访问它,因此它可能是一个字典。字典通常不保留顺序,因此无法通过索引访问它。但是,根据您的Python版本,您可以尝试使用方括号进行索引访问。 - Alesof
我使用 Python 3.7。 - Felix
2个回答

6

您可以使用相机列表中的索引来选择它。例如,如果您想选择列表中的第一个相机,可以使用以下代码:

device = graph.get_input_devices().index("HD Pro Webcam C920")

选择第二个相机:

device = graph.get_input_devices().index("HD Pro Webcam C920", 1)

要选择第三个相机,您可以使用:

device = graph.get_input_devices().index("HD Pro Webcam C920", 2)

index() 方法中,第二个参数指定了搜索的起始索引。
你也可以修改你的 getCamera() 函数,以接受一个参数来指定你想要使用哪个相机的索引值:
def getCamera(camera_index):
    graph = FilterGraph()
    cameras = graph.get_input_devices()
    if camera_index >= len(cameras):
        raise ValueError("Camera index out of range")
    return cameras[camera_index]

for i in range(3):
    camera = getCamera(i)
    #Do something with it

看起来不错。第一个测试成功了。我会进行一些测试。 - Felix
这是正确的答案。我过去所做的是创建一个以相机索引或普通描述作为键,相机对象作为值的字典。为了跟踪每个相机的输入流,创建一个自定义相机类可能很有用。 - StephanT

0

graph.get_input_devices() 返回一个列表。

像任何列表一样,您总是可以使用方括号 [ ] 访问索引。

enter image description here

所以,如果你有像你所说的三个相机,你可以随时使用graph.get_input_devices()[0]graph.get_input_devices()[2]来获取列表中第1和第3个项目

如果有人好奇,这是来自pygrabber模块


这就是我尝试过的。但是它并不起作用。 - Felix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接