与 Python 共享 OpenCV C++ 对象
Share OpenCV C++ Object with Python
场景:
C++ 程序进程使用 OpenCV 捕获图像。
另一个进程,使用 Python 和 OpenCV 与第一个程序共享内存区域(使用 mmap)。
问题:
如何在 Python 进程中创建对共享内存区域中已存在的同一图像的引用? Python 过程中的这部分可以编写为 C 模块并导入到 Python.
为了我的特定需求,只有 C++ 进程创建和写入数据,而 Python 进程只读取(并处理)数据。
额外信息:
给定同一张图片,C++的data
字段cv::Mat
和numpy.array
是相等的(相同的大小和内容)。所以不需要转换。
由于语言已经分离了内存管理器,它可能必须使用一些外部同步(例如信号量)来避免一个进程使用另一个进程的释放区域。
我的问题是在 Python numpy.array
对象中创建数据字段指向共享内存中特定区域的对象。
以下选项可用于为预分配内存缓冲区创建 cv::Mat
或 numpy.array
header:
对于cv::Mat,有一个constructor在预分配的内存上创建一个cv::Matheader(Mat的析构函数不会释放内存在这种情况下):
cv::Mat(int rows, int cols, int type, void * data, size_t step = AUTO_STEP)
-
numpy.frombuffer(buffer, dtype=float, count=- 1, offset=0, *, like=None)
场景:
C++ 程序进程使用 OpenCV 捕获图像。 另一个进程,使用 Python 和 OpenCV 与第一个程序共享内存区域(使用 mmap)。
问题:
如何在 Python 进程中创建对共享内存区域中已存在的同一图像的引用? Python 过程中的这部分可以编写为 C 模块并导入到 Python.
为了我的特定需求,只有 C++ 进程创建和写入数据,而 Python 进程只读取(并处理)数据。
额外信息:
给定同一张图片,C++的data
字段cv::Mat
和numpy.array
是相等的(相同的大小和内容)。所以不需要转换。
由于语言已经分离了内存管理器,它可能必须使用一些外部同步(例如信号量)来避免一个进程使用另一个进程的释放区域。
我的问题是在 Python numpy.array
对象中创建数据字段指向共享内存中特定区域的对象。
以下选项可用于为预分配内存缓冲区创建 cv::Mat
或 numpy.array
header:
对于cv::Mat,有一个constructor在预分配的内存上创建一个cv::Matheader(Mat的析构函数不会释放内存在这种情况下):
cv::Mat(int rows, int cols, int type, void * data, size_t step = AUTO_STEP)
-
numpy.frombuffer(buffer, dtype=float, count=- 1, offset=0, *, like=None)