垫子结构和记忆的问题
Problems with Mat structure and memcpy
我正试图使用memcpy
(我在Windows中使用OpenCV 2.4.3)将一个Mat
结构从OpenCV复制到另一个Mat
基本上代码是:
Mat NewFrame,OldFrame;
OldFrame=imread(image,CV_LOAD_IMAGE_COLOR);
memcpy(&NewFrame,&OldImage,sizeof(Mat));
问题是NewFrame和OldFrame不一样。NewFrame.step.buf
的地址在此内存之后发生了更改
在memcpy之前,OldFrame中step
字段的地址为:
OldFrame.step.p=0x0032f338
OldFrame.step.buf=0x0032f338
memcpy之后,NewFrame中step
字段的地址为:
NewFrame.step.p=0x0032f338
NewFrame.step.buf=0x0032f2f8 // it should be 0x0032f338
我不明白为什么地址变了,以及如何解决这个问题。
"有没有理由不使用cv::Mat::clone?–juancapanza 48分钟前"
请相信那个家伙,上帝会杀死小猫,如果你在简历上使用memcpy:Mat是这样的!
此外,它们被重新计数,因此它们可以处理被放入std::vector中的问题,这本身就很好,不需要删除它们。realloc是一个C的东西,这就是C++!
所以,你可以做一个"浅"拷贝,Mat a,b;b=a;(现在a和b指向同一个内存,refcount增加了。)或深度复制,Mat a,b,b=克隆();(现在两人都有了自己的像素副本)
使用普通memcpy与浅拷贝类似,只是不能正确处理refcount,所以memcpied Mat的src和dst迟早都会有悬空指针。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- C++遗传,记忆问题
- 我的记忆动态规划算法有什么问题?
- 在使用SFML时,我会得到记忆或出于界限异常,这是什么问题
- 是记忆问题吗?C [代码块] [Windows]
- 有没有方法可以增加数组的记忆?和相关问题
- 我处理这件事的方式有记忆问题吗
- std::向量记忆问题
- 结合和记忆问题
- 我地图上的记忆问题在哪里?
- 向量的记忆行为问题
- 这会导致记忆问题吗?
- 另一个小记忆C++问题
- 简单的记忆问题练习
- 垫子结构和记忆的问题