如何直接在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 InterProcess Shared Memory 中检索共享向量