用Python共享OpenCV C++对象

All*_*mon 5 c++ python opencv numpy shared-memory

场景:

C++程序进程使用OpenCV捕获图像.另一个使用Python和OpenCV的进程有一个共享内存区域(带有mmap)和第一个程序.

问题:

如何在Python进程中创建对共享内存区域中已存在的同一图像的引用?Python过程中的这一部分可以编写为C模块并导入到Python中.

对于我的特定需求,只有C++进程创建和写入数据,而Python进程只是读取(并处理)它.

额外信息:

给定相同的图像,所述data的C字段++ cv::Matnumpy.array是相等的(相同的大小和内容).所以没有必要转换.

由于语言已经分离了内存管理器,因此可能必须使用一些外部同步(例如,信号量)来避免一个进程使用另一个进程中的释放区域.

我的问题是在Python numpy.array对象中创建数据字段指向共享内存中的特定区域.

Mah*_*hdi 1

以下选项可用于创建预分配内存缓冲区cv::Mat或标头:numpy.array

  • 对于 cv::Mat,有一个构造函数可以在预分配的内存上创建 cv::Mat 标头(在这种情况下,Mat 的析构函数不会释放内存):

    cv::Mat(int rows, int cols, int type, void * data, size_t step = AUTO_STEP)

  • 来自缓冲区的 numpy 数组

    numpy.frombuffer(buffer, dtype=float, count=- 1, offset=0, *, like=None)