如何直接在boost共享内存中编写opencv cv :: Mat图像

时间:2017-03-06 08:00:03

标签: c++ opencv boost

我有两个想要共享cv :: Mat图像信息的进程,我想使用boost managed_shared_memory来实现它。由于复制图像非常耗时,因此我试图找到一种方法,在首次出现时将图像直接写入共享内存。

然而,由于cv :: Mat只是一个标题,它有一个指向图像数据的指针,而数据位于其他地方,我无法实现我的想法。我有一些测试代码,但它们非常混乱,无法工作,所以我认为我的方向完全错误。有人有这方面的经验吗?谢谢!

1 个答案:

答案 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