因为工作原因需要将C++程序里面的图像传递到python,使用共享内存是最好的方法,这里参照网上较为完善的办法:https://www.cnblogs.com/gooutlook/p/14989599.html
改进
使用python的接收程序,速度很慢,接收720p的图像,大概只有不到2Hz。这速度太慢了,我之前用过socket发送,也没有这么慢,仔细看了一下代码,是读取图像数组慢,代码如下
RecImg = np.reshape(np.array(np.fromiter(pointer_img, dtype=np.uint8, count=size[0]*size[1]*size[2])) ,size)
np.reshape是数组变形,不会影响速度,np.array为创建数组,也不会太慢,
np.fromiter是从迭代器创建NumPy数组,这个迭代器一个个地添加uint8数据,最慢的在这里。
改写了一下
data = ctypes.cast(pointer_img, ctypes.POINTER(date_type)).contents
RecImg = np.frombuffer(data,dtype=np.uint8,count=-1).reshape(size)
速度起飞,0.05毫秒一张,下图为对比,上面是我优化过的代码获取一张图像需要的时间,下面是原来用迭代器获取一张图像需要的时间。
附上git地址,可以直接使用。
https://github.com/lizhuo1414/cpp_send_img_to_python.git