我正在使用 Cython 从 USB 摄像头抓取图像并将它们转换为返回给调用者的 PIL 图像。
图像的数据位于图像抓取函数返回的结构的“convert_buffer”成员所指向的字符数组中:
struct FlyCaptureImage:
/// stuff
char * convert_buffer
/// more stuff
现在,我这样做是为了把它变成一个 PIL 图像:
cdef unsigned char *convert_buffer
cdef Py_ssize_t byte_length
cdef bytes py_string
// get the number of bytes into a Py_ssize_t type
byte_length = count
// slice the char array so it looks like a Python str type
py_string = convert_buffer[:byte_length]
// create the PIL image from the python string
pil_image = PILImage.fromstring('RGB', (width, height), py_string)
将数据转换为 python 字符串的过程需要 2 毫秒,这听起来像是一个零拷贝事件。是否可以让 PIL 仅从相机 API 提供的 char * 图像数据指针创建我的图像?