gpt4 book ai didi

python - Numpy 数组操作太慢 np.asarray()

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:14 25 4
gpt4 key购买 nike

我正在使用 Numpy 和 OpenCV2.4.1,我的 IP Camera 有一个通过回调函数返回图片缓冲区的 SDK。简化后的函数如下:

def py_fDecodeCallBack(lPort, pBuffer, lSize, pFrameInfo, lReserved1, lReserved2):
frameInfo = pFrameInfo.contents
pBufY = np.asarray( pBuffer[:frameInfo.lHeight*frameInfo.lWidth],dtype=np.uint8).reshape(frameInfo.lHeight,frameInfo.lWidth, 1)

$

pBuffer 是 POINTER(c_ubyte) 类型,因为我使用的是 ctypes。

我尝试获取pBuffer的Y channel ,格式为YV12,放入Numpy Array中供OpenCV处理。

但是np.asarray()有一个很大的瓶颈,获取帧数据并放入3D numpy数组(Height,Width,Channel)的时间太长。我已经测试过 pBuffer 的指针访问操作来切出 Y 数据不是瓶颈。此回调只能在具有 4GB 内存的双核计算机上以每秒 3 帧的速度运行。如果没有 np.asarray() 操作,回调可以每秒 30 帧的速度运行。

请建议一种方法,以便将 pBuffer 数据放入 3D numpy 数组中,该数组的速度足以达到每秒 30 帧。

最佳答案

如果您不需要复制数据(即您的回调将处理它然后丢弃它)您可以直接使用缓冲区构造数组:

array = (ctypes.c_ubyte * frameInfo.lHeight * frameInfo.lWidth * 1
).from_address(ctypes.addressof(pBuffer.contents))
pBufY = np.ndarray(buffer=array, dtype=np.uint8,
shape=(frameInfo.lHeight, frameInfo.lWidth, 1))

关于python - Numpy 数组操作太慢 np.asarray(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com