<p>我可以用“IDS python libraries”<a href="https://pypi.org/project/pyueye/" rel="nofollow noreferrer">Link to official project</a>让一个ueye USB 3.0相机在Direct3D模式下工作。</p>
<p>也在使用:wxpython 2.8,python2.7。要记住的一个关键项是安装DirectX SDK。DXSDK_Jun10.exe对我有效。</p>
<p>这是有效的代码,但它没有完全关闭(关闭大约需要20秒)。似乎只要停止捕捉,它就能正常关闭。。。给读者的练习。</p>
<pre><code>import wx
def create(parent):
return Dialog1(parent)
[wxID_DIALOG1, wxID_DIALOG1BCAPTURE, wxID_DIALOG1DIMAGE,
] = [wx.NewId() for _init_ctrls in range(3)]
class Dialog1(wx.Dialog):
def _init_ctrls(self, prnt):
# generated method, don't edit
wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
pos=wx.Point(739, 274), size=wx.Size(888, 674),
style=wx.DEFAULT_DIALOG_STYLE, title='Dialog1')
self.SetClientSize(wx.Size(872, 636))
self.Dimage = wx.Panel(id=wxID_DIALOG1DIMAGE, name=u'Dimage',
parent=self, pos=wx.Point(24, 24), size=wx.Size(640, 480),
style=wx.TAB_TRAVERSAL)
self.Dimage.SetBackgroundColour(wx.Colour(233, 251, 230))
self.BCapture = wx.Button(id=wxID_DIALOG1BCAPTURE, label=u'Capture',
name=u'BCapture', parent=self, pos=wx.Point(136, 520),
size=wx.Size(144, 71), style=0)
self.BCapture.Bind(wx.EVT_BUTTON, self.OnBCaptureButton,
id=wxID_DIALOG1BCAPTURE)
def __init__(self, parent):
self._init_ctrls(parent)
# Video
from pyueye import ueye
import win32ui
self.capture = None
h_cam = ueye.HIDS(0)
hwnd = ueye.HWND(self.Dimage.GetHandle())
cam = ueye.is_InitCamera(h_cam,hwnd)
if cam == 0:
print 'camera was intintialized'
else:
print 'camera result',cam
col = ueye.c_int(0)
mod = ueye.c_int(0)
ueye.is_GetColorDepth(h_cam, col, mod)
nRet = ueye.is_SetColorMode (h_cam, mod)
if nRet != ueye.IS_SUCCESS: print 2,nRet
print 1,col,mod
SensorInfo = ueye.SENSORINFO()
nRet = ueye.is_GetSensorInfo(h_cam,SensorInfo)
if nRet != ueye.IS_SUCCESS: print 55,nRet
for i in SensorInfo._fields_:
print i[0],eval('SensorInfo.%s'%i[0])
imgw,imgh = self.Dimage.GetSizeTuple()
imageSize = ueye.IS_SIZE_2D()
imageSize.s32Width = imgw
imageSize.s32Height = imgh
nRet = ueye.is_AOI(h_cam, ueye.IS_AOI_IMAGE_SET_SIZE, imageSize, ueye.sizeof(imageSize))
if nRet != ueye.IS_SUCCESS: print 77,nRet
m_nDisplayMode = ueye.IS_SET_DM_DIRECT3D
nRet = ueye.is_SetDisplayMode(h_cam, m_nDisplayMode)
if nRet != ueye.IS_SUCCESS: print 88,nRet
#ueye.is_DirectRenderer(h_cam,DR_GET_OVERLAY_KEY_COLOR
#ueye.is_DirectRenderer(h_cam,DR_GET_MAX_OVERLAY_SIZE
#ueye.is_DirectRenderer(h_cam,DR_GET_USER_SYNC_POSITION_RANGE
ueye.is_DirectRenderer(h_cam, ueye.DR_SET_VSYNC_OFF, ueye.c_int(0), ueye.c_int(0))
#ueye.is_DirectRenderer(h_cam, ueye.DR_SET_HWND, hwnd,ueye.sizeof(hwnd))
#ueye.is_DirectRenderer(h_cam,ueye.DR_ENABLE_SCALING,None,None)
nRet = ueye.is_CaptureVideo(h_cam, ueye.IS_WAIT)
if nRet != ueye.IS_SUCCESS: print 99,nRet
def OnBCaptureButton(self, event):
event.Skip()
if __name__ == '__main__':
app = wx.App(0)
parent = wx.Frame(None)
parent.Show()
dlg = create(parent)
try:
result = dlg.ShowModal()
finally:
dlg.Destroy()
del dlg.capture
</code></pre>