gpt4 book ai didi

c++ - 像这样操作 cv::Mat 的内部缓冲区是否安全?

转载 作者:行者123 更新时间:2023-11-28 08:08:30 25 4
gpt4 key购买 nike

我需要从缓冲区创建一个 cv::Mat,但我不想共享数据,所以我不能使用 Mat(height, width, type, data) 构造函数:

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 内部缓冲区只是一个数据 block - 随心所欲地处理它们(只是不要释放它们!)

对于多维数组(例如图像),唯一的复杂性是每个新行不一定直接跟在最后一行的末尾之后。行被填充,所以它们总是从 32 位(64 位构建 64 位??)边界开始 - 所以你需要使用数据(行)。

cv::Mat 中有一个关于“外部数据”的主题文档

关于c++ - 像这样操作 cv::Mat 的内部缓冲区是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9689119/

25 4 0
文章推荐: javascript - 无法从事件处理程序访问 js 对象方法
文章推荐: html - Wordpress 模板 CSS 问题
文章推荐: ios - 如何将 UIViewController 作为参数传递给 swift 3?
文章推荐: javascript - AngularJs:AngularJS 部分中 标签的使用