我需要一个在Windows上与python一起工作的uEye相机,以便在直播流上拍照和操作。
由于uEye相机是广泛分布的工业相机,我本以为有一个标准的解决方案,但我找不到任何。
该解决方案需要在WindowsXP或Windows7上的Python2.7下运行。
如果有人在Windows上成功地使用了python中的uEye相机,我将不胜感激,他可以分享他在这个问题上的知识,或者至少能给我指明正确的方向。我也觉得有必要找到一个通用的解决方案,因为我肯定不是唯一一个有这个要求的人。
到目前为止我试过的
有一个python driver available在Linux下工作,根据文档,“应该在windows上工作”。
我试过,但安装失败:python setup.py install
给我
ueye\ueye.pyx: cannot find cimported module 'stdlib'
ueye\ueye.pyx: cannot find cimported module 'python_cobject'
Compiling ueye\ueye.pyx because it changed.
Compiling ueye\ueyeh.pyx because it changed.
[1/2] Cythonizing ueye\ueye.pyx
我不知道什么是cimported
模块,也不知道这是否应该有效。因此,如果有人在Windows系统上成功地安装了这个驱动程序,那就很好了。
OpenCV似乎是一种图像采集和处理的标准。似乎有些人用它来访问uEye相机,同时也有一些共识认为uEye相机不适用于openCV。我还没有发现任何有效的示例代码。
不管怎样,我尝试了这个(使用openCV version 2.4.13),我可以访问相机并从中检索图片。最初的分辨率是480 x 640
,但我可以将其更改为768 x 1024
的传感器分辨率。
但是,我无法正确设置曝光时间和增益,如我使用的以下代码所示。
cam = cv2.VideoCapture(0)
width = cam.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
height = cam.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)
exposure = cam.get(cv2.cv.CV_CAP_PROP_EXPOSURE)
print width, height, exposure # prints 640 480 -4.0
hr = cam.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 768)
wr = cam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1024)
print "Setting resolution ", hr, wr # prints True True
cam.set(cv2.cv.CV_CAP_PROP_EXPOSURE, 0) # or any other value, same for gain
width = cam.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
height = cam.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)
exposure = cam.get(cv2.cv.CV_CAP_PROP_EXPOSURE)
print width, height, exposure # 1024.0 768.0 -4.0
ret, buff = cam.read()
cam.release()
很可能是相机处于某种自动模式,可以自动调整诸如曝光时间和增益等参数。但如果是这样的话,我应该如何设置这个自动模式关闭。
simpleCV似乎是openCV的替代品。我也试过了,它给了一个问题,只获取一个480 x 640
像素的图像,我找不到任何不同的设置方法,也无法设置曝光时间。
from SimpleCV import Camera
cam = Camera(0)
img = cam.getImage() # img is a 480 x 640 pixel image
一种选择可能是编写一个C代码,通过其SDK访问相机。一个完整的documentation of the SDK可用 似乎有人成功地做到了(here,或者here) 但我甚至不知道从哪里开始以及如何将实时图像导入python。
我最近有一个类似的项目,找到了一些对我有用的解决方案。我还使用了python 2.7(32位)和windows 7。我确信还有其他多种方法可以控制相机,但我找到的两种方法是(1)使用c++API的ctypes,或(2)使用pythonnet(即clr)和dotNet库。每个方法都需要从单独的dll文件中导入和调用函数。我最终更喜欢ctypes方法,因为它更容易编译成可执行文件,但这两种方法在控制摄像机方面同样有效。
1。使用python ctypes的uEye API:
uEye API dll中的函数可以在python中使用ctypes调用。使用ctypes稍微有点麻烦,因为在python和c之间传递变量需要不断转换数据类型,但它是有效的。
2。使用pythonnet&uEye.NET接口
从.NET dll调用函数的语法比使用ctypes更简单,但是由于某些原因,安装pythonnet(clr)包对我来说很困难。下面是使用.NET函数获取相机图像的示例:
我可以用“IDS python libraries”Link to official project让一个ueye USB 3.0相机在Direct3D模式下工作。
也在使用:wxpython 2.8,python2.7。要记住的一个关键项是安装DirectX SDK。DXSDK_Jun10.exe对我有效。
这是有效的代码,但它没有完全关闭(关闭大约需要20秒)。似乎只要停止捕捉,它就能正常关闭。。。给读者的练习。
相关问题 更多 >
编程相关推荐