在C / C ++和Python之间共享内存


问题内容

有没有一种共享内存的方法来在C / C 和python之间共享一个openCV图像(C

+中的MAT和python中的numpy)?不需要多平台,我在linux中做,我想过mmap或类似想法之间的共享。

我有两个正在运行的进程,一个是用C编写的,另一个是python,我需要在它们之间共享一个映像。

我将通过套接字从c进程调用python,但是我需要通过内存发送和映像。

另一种选择是将其写入内存文件,不确定是否会更耗时。


问题答案:

好的,这并不是真正意义上的内存共享。IPC需要将图像数据从一个进程发送到另一个进程。

我建议您使用Unix命名管道。您将必须以C / C
++的字符串格式获取原始数据,通过管道或Unix套接字将其发送到Python,然后从发送的数据中获取一个numpy数组。也许使用np.fromstring()函数。

不用担心速度,管道非常快。本地和Unix套接字也是如此。在获取字符串表示形式并将其返回矩阵时,大多数时间将被浪费。

您可能会创建真正的共享内存空间,并将C / C
++中的OpenCV中的数据直接导入Python,然后在Python中使用OpenCV来获取numpy数组,但这很复杂。如果您不需要光速,最好的选择就是管道。