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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何直接在boost共享内存中编写opencv cv :: Mat图像相关的知识,希望对你有一定的参考价值。

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

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

答案

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

以上是关于如何直接在boost共享内存中编写opencv cv :: Mat图像的主要内容,如果未能解决你的问题,请参考以下文章

C ++ BOOST:Windows共享内存get_size()返回零

Boost、共享内存和向量

从 Boost InterProcess Shared Memory 中检索共享向量

限制子进程访问共享内存和消息队列

boost::interprocess 不在共享内存副本中的容器容器

boost的问题:进程间共享内存