这样操作cv::Mat的内部缓冲区安全吗
Is it safe to manipulate the internal buffer of a cv::Mat like this?
我需要从缓冲区创建一个cv::Mat,但我不想共享数据,所以我不能使用Mat(高度、宽度、类型、数据)构造函数:
int data[100];
cv::Mat m;
m.create(10, 10, CV_32SC1); // allocate own buffer for m
for (size_t i = 0; i < 100; ++i)
{
reinterpret_cast<int*>(m.data)[i] = data[i];
}
我需要强制转换内部缓冲区(它总是uchar*),以便能够直接复制我想要的类型(在本例中为int)的数据,而且它似乎可以工作。然而,我记得文档更喜欢使用uchar*执行所有操作的方法,即将源缓冲区强制转换为uchar*,并使用一个名为stepWidth的参数来获得以uchar*为单位的正确偏移量。相反,我会遇到麻烦吗?还是CV_32SC1-型Mat的缓冲区只是int的缓冲区,没有什么区别?
是的,cv::Mat内部缓冲区只是一块数据-随意使用它们(只是不要释放它们!)
对于多维数组(如图像),唯一的复杂性是每一个新行不一定直接从最后一行的末尾开始。行是填充的,所以它们总是从32位(64位构建为64位?)边界开始,所以您需要使用数据(行)。
简历中有一个关于"外国数据"的主题::Mat docs
相关文章:
- C++字符*缓冲区的大小
- 将函数类成员映射到类本身内部
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- STD ::向量如何调整其内部缓冲区大小
- 如何在使用之前清除内部服务器套接字缓冲区的内容
- 内部套接字接收缓冲区实现
- 这样操作cv::Mat的内部缓冲区安全吗
- 使用指向内部缓冲区的指针移动语义
- 为std::istringstream设置内部缓冲区
- 是否存在编解码场景,其中目标缓冲区需要多个内部字符的空间
- MPI_Isend重用内部缓冲区
- 清理窗口套接字内部缓冲区
- 如何访问 std::vector 的内部连续缓冲区,是否可以将其与 memcpy 等一起使用
- 我应该释放内部分配的MFT输出缓冲区的返回IMFSample吗
- 是否允许修改c++ 11中操作符[]返回的内部std::string缓冲区?
- 如何清理(用随机字节覆盖)std::string内部缓冲区
- 访问flex扫描仪的内部缓冲区、长度和令牌匹配位置