我有两个想要共享cv :: Mat图像信息的进程,我想使用boost managed_shared_memory来实现它。由于复制图像非常耗时,因此我试图找到一种方法,在首次出现时将图像直接写入共享内存。
然而,由于cv :: Mat只是一个标题,它有一个指向图像数据的指针,而数据位于其他地方,我无法实现我的想法。我有一些测试代码,但它们非常混乱,无法工作,所以我认为我的方向完全错误。有人有这方面的经验吗?谢谢!
答案 0 :(得分:0)
cv :: Mat.ptr()函数为您提供OpenCV图像的第一个指针。
数据缓冲区的大小等于Channels * Height * Width * elmsize,因此如果每个元素均为1字节(基于CvType),则可以仅使用
memcpy(dest, image.ptr(), Channels * Height * Width)
。
注意事项:
-图像必须是连续的。使用isContinuous()进行检查。如果失败,请克隆图像以获取连续副本。
-要从共享内存中检索图像,您将必须构造一个具有相同高度,宽度,通道,CvType和台阶的新cv:Mat。然后使用memcpy。
有关最低限度的工作示例,请参见Shared Memory Example。