python调用海康工业相机,官方给出的SDK里没有转到opencv格式的例子,网上找了下,只有一篇,转换部分的代码如下:
temp = np.asarray(pData2) # 将c_ubyte_Array转化成ndarray得到(3686400,)
temp = temp.reshape((2592, 2048, 1)) # 根据自己分辨率进行转化
gray = cv2.cvtColor(temp,cv2.COLOR_BGR2GRAY)
cv2.imshow("img", gray)
但是ctypes的格式转np.array的会报错,网上的说法是numpy的版本问题,试了试没解决,搜了半天,找到一个可行的,代码如下(就是在海康SDK的例子里改的):
winfun_ctype = WINFUNCTYPE
stFrameInfo = POINTER(MV_FRAME_OUT_INFO_EX)
pData = POINTER(c_ubyte)
FrameInfoCallBack = winfun_ctype(None, pData, stFrameInfo, c_void_p)
def image_callback(pData2, pFrameInfo, pUser):
stFrameInfo = cast(pFrameInfo, POINTER(MV_FRAME_OUT_INFO_EX)).contents
if stFrameInfo:
b = string_at(pData2, 2592 * 2048 * 1)
nparr = np.frombuffer(b, np.uint8)
nparr = nparr.reshape(2048, 2592, 1)
cv2.imshow(" dst ", nparr)
cv2.waitKey(1)