我使用一个DLL库来调用函数来操作python中的相机,我可以使用ctypes检索图像,但是它的格式不正确。返回的图像是重复的,其中一半是空白的。我需要做些什么来解决这个问题?在
我有一个labview程序,它可以正确地从相机上拍摄图像,所以它们应该是这样的。在
使用Labview检索到正确的图像
在python中,图像是复制的,并且是横向的。在
python代码:
from ctypes import *
import numpy as np
import matplotlib.pyplot as plt
mydll = windll.LoadLibrary('StTrgApi.dll')
hCamera = mydll.StTrg_Open()
print(hCamera)
im_height = 1200
im_width = 1600
dwBufferSize = im_height * im_width
pbyteraw = np.zeros((im_height, im_width), dtype=np.uint16)
dwNumberOfByteTrans = 0
dwNumberOfByteTrans = (c_ubyte * dwNumberOfByteTrans)()
dwFrameNo = 0
dwFrameNo = (c_ubyte * dwFrameNo)()
dwMilliseconds = 3000
mydll.StTrg_TakeRawSnapShot(hCamera,
pbyteraw.ctypes.data_as(POINTER(c_int16)), dwBufferSize*2,
dwNumberOfByteTrans, dwFrameNo, dwMilliseconds)
print(pbyteraw)
plt.matshow(pbyteraw)
plt.show()
C++图像获取代码:
^{pr2}$
基于你的C代码,类似这样的东西应该可以工作,但是它还没有经过测试,因为我没有你的相机库。如果使用的是32位Python,请确保库调用是
__stdcall
以使用WinDLL
,否则使用CDLL
。64位Python不重要。定义参数类型和返回类型有助于捕获错误。对于输出参数,创建正确ctype的实例,然后传递byref()
。您当前处理输出参数的方式可能是导致崩溃的原因。设置argtypes会检测到这些值不是指向dword的指针。在相关问题 更多 >
编程相关推荐