【问题标题】:Share OpenCV C++ Object with Python与 Python 共享 OpenCV C++ 对象
【发布时间】:2026-02-08 18:25:01
【问题描述】:

场景:

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

问题:

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

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

额外信息:

给定相同的图像,C++ 的cv::Matnumpy.arraydata 字段相等(大小和内容相同)。所以不需要转换。

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

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

【问题讨论】:

    标签: python c++ opencv numpy shared-memory


    【解决方案1】:

    以下选项可用于为预分配的内存缓冲区创建 cv::Matnumpy.array 标头:

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

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

    • numpy array from buffer:

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

    【讨论】: