有没有一种(简单的)方法可以将我的相机的曝光设置为比2秒的倍数更高的精度?

2024-06-02 06:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是成像源TIS DMK 33GR0134相机。我在Win32上使用Python 3.8.10编写代码。我的目标是创建一个图形界面,使用户能够控制相机。因此,我需要用Python控制这个摄像头。我知道我可以使用openCV控制此相机的曝光,这得益于:

self.capture = cv2.VideoCapture(1)

self.capture.set(cv2.CAP_PROP_EXPOSURE, -3)

在这里,我将相机曝光设置为2倍-3=1/8秒

但是,当我编写代码时:

self.capture = cv2.VideoCapture(1)

self.capture.set(cv2.CAP_PROP_EXPOSURE, -3.5)

这应与2次方-3.5=0088的曝光相对应,约为1/11秒。取而代之的是,相机的曝光设置为2次方-3

我真的需要能够以更高的精度设置相机的曝光,我知道这是可能的,因为当我使用成像源免费提供的IC捕获软件时,我可以轻松地将相机曝光设置为1/11秒

我确实尝试过使用github的一些代码,这些代码也是由imaging source提供的,允许直接与相机对话。在一个论坛上发现了另一个代码,它看起来非常好,可以回答我的问题:

import ctypes as C
import tisgrabber as IC
import cv2
import numpy as np
import matplotlib.pyplot as plt

Camera = IC.TIS_CAM()

Devices = Camera.GetDevices()
for i in range(len( Devices )):
print( str(i) + " : " + str(Devices[i]))

Camera.open("DMK 33UX183 16910441")

Camera.SetVideoFormat('Y16 (5472x3648)')
Camera.SetFormat(IC.SinkFormats.Y16)
Camera.StartLive(0)

Camera.SetPropertySwitch("Exposure","Auto",0)
Camera.SetPropertyAbsoluteValue("Exposure","Value",2)
ExposureTime=[0]
Camera.GetPropertyAbsoluteValue("Exposure","Value",ExposureTime)
print("Exposure time abs: ", ExposureTime[0])

Gainauto=[0]
Camera.GetPropertySwitch("Gain","Auto",Gainauto)

Camera.SetPropertySwitch("Gain","Auto",0)
Camera.SetPropertyValue("Gain","Value",0)

Camera.SnapImage()
image = Camera.GetImageEx()
image = cv2.flip(image,0)
image = cv2.erode(image,np.ones((11, 11)))
image=np.right_shift(image,4)

此处链接到论坛:https://github.com/TheImagingSource/IC-Imaging-Control-Samples/issues/6

但是,我使用的tisgrabber在运行时返回以下错误:找不到模块“tisgrabber_x64.dll”(或其依赖项之一)。尝试使用构造函数语法的完整路径

但我没有在互联网上找到完整的路径

(我没有在这里包含代码,因为它确实非常庞大,这里是链接:

https://github.com/TheImagingSource/IC-Imaging-Control-Samples/blob/master/Python/Open%20Camera%2C%20Grab%20Image%20to%20OpenCV/tisgrabber.py

我希望一切都清楚 如果需要,我随时可以提供更多的上下文或精确性,并愿意接受您可能提出的任何建议

希望你有一个愉快的一天


Tags: 代码imageimportselfgithubautoasnp