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

问题描述 投票:0回答:1

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

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

c++ opencv boost
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.