C++ 覆盖cv::Mat数据的最佳方法

C++ 覆盖cv::Mat数据的最佳方法,c++,opencv,C++,Opencv,目前我有这样的想法,因为我在OpenCVMatAPI上快速扫描时,找不到更好的方法: cv::Mat frame_mat(width, height, CV_8UC3); for(;;) { // Obtain raw data frame_mat = cv::Mat(height, width, CV_8UC3, raw_data); // Use frame_mat } 它看起来对资源不友好,在较高的层次上,它似乎在为每个迭代中的临时cv::Mat对象分配和释放内

目前我有这样的想法,因为我在OpenCV
Mat
API上快速扫描时,找不到更好的方法:

cv::Mat frame_mat(width, height, CV_8UC3);

for(;;) {
    // Obtain raw data
    frame_mat = cv::Mat(height, width, CV_8UC3, raw_data);
    // Use frame_mat
}
它看起来对资源不友好,在较高的层次上,它似乎在为每个迭代中的临时
cv::Mat
对象分配和释放内存,只是为了设置一个全局对象


我应该如何直接设置
free\u mat

您可以使用单独分配每个元素,或者使用复制每行的数据。请务必阅读文档,尤其是最后一个文档


请注意,这些方法最终可能比仅仅创建一个临时文件慢(在启用优化时,编译器甚至可能会删除临时文件)。

您可以使用单独分配每个元素,或者使用复制每行的数据。请务必阅读文档,尤其是最后一个文档


请注意,这些方法最终可能比仅仅创建一个临时文件慢(在启用优化时,编译器甚至可能会删除临时文件)。

您可以使用单独分配每个元素,或者使用复制每行的数据。请务必阅读文档,尤其是最后一个文档


请注意,这些方法最终可能比仅仅创建一个临时文件慢(在启用优化时,编译器甚至可能会删除临时文件)。

您可以使用单独分配每个元素,或者使用复制每行的数据。请务必阅读文档,尤其是最后一个文档


请注意,这些方法最终可能比仅仅创建一个临时文件要慢(在启用优化时,编译器甚至可能会删除临时文件)。

您不需要在循环之外分配任何内容。您的代码应该是:

for(;;) {
    // Obtain raw data
    Mat frame_mat(height, width, CV_8UC3, raw_data);
    // Use frame_mat
}
在这种情况下,frame_mat只是原始数据的包装器,允许您将其传递给OpenCV函数。它没有分配任何内存,除了一个小的恒定大小的头。它也不允许取消分配未分配的内存,所以不要忘记在作用域末尾释放您的原始_数据


还请记住,如果更改frame\u mat中像素的值,原始数据也会更改。

您不需要在循环之外分配任何内容。您的代码应该是:

for(;;) {
    // Obtain raw data
    Mat frame_mat(height, width, CV_8UC3, raw_data);
    // Use frame_mat
}
在这种情况下,frame_mat只是原始数据的包装器,允许您将其传递给OpenCV函数。它没有分配任何内存,除了一个小的恒定大小的头。它也不允许取消分配未分配的内存,所以不要忘记在作用域末尾释放您的原始_数据


还请记住,如果更改frame\u mat中像素的值,原始数据也会更改。

您不需要在循环之外分配任何内容。您的代码应该是:

for(;;) {
    // Obtain raw data
    Mat frame_mat(height, width, CV_8UC3, raw_data);
    // Use frame_mat
}
在这种情况下,frame_mat只是原始数据的包装器,允许您将其传递给OpenCV函数。它没有分配任何内存,除了一个小的恒定大小的头。它也不允许取消分配未分配的内存,所以不要忘记在作用域末尾释放您的原始_数据


还请记住,如果更改frame\u mat中像素的值,原始数据也会更改。

您不需要在循环之外分配任何内容。您的代码应该是:

for(;;) {
    // Obtain raw data
    Mat frame_mat(height, width, CV_8UC3, raw_data);
    // Use frame_mat
}
在这种情况下,frame_mat只是原始数据的包装器,允许您将其传递给OpenCV函数。它没有分配任何内存,除了一个小的恒定大小的头。它也不允许取消分配未分配的内存,所以不要忘记在作用域末尾释放您的原始_数据


还请记住,如果您更改frame_mat中像素的值,原始数据也会更改。

我发现很难看到优化如何始终覆盖
frame_mat
内部数据(而不仅仅是指针等),从而实现免费存储的零分配,这正是我所追求的。在这里,我假设
cv::Mat
在堆栈中很轻,而在空闲存储中很重。我发现很难看到优化如何总是覆盖
frame\u Mat
内部数据(而不仅仅是指针等),从而在空闲存储上实现零分配,这正是我所追求的。在这里,我假设
cv::Mat
在堆栈中很轻,而在空闲存储中很重。我发现很难看到优化如何总是覆盖
frame\u Mat
内部数据(而不仅仅是指针等),从而在空闲存储上实现零分配,这正是我所追求的。在这里,我假设
cv::Mat
在堆栈中很轻,而在空闲存储中很重。我发现很难看到优化如何总是覆盖
frame\u Mat
内部数据(而不仅仅是指针等),从而在空闲存储上实现零分配,这正是我所追求的。在这里,我假设
cv::Mat
在堆栈中很轻,在空闲存储中很重。实际上,我最终没有看到外部变量在这种情况下是无用的。同样感谢关于解除分配的其他信息,我不知道
Mat
只是我原始数据的一个薄包装,我需要释放它(OpenCV初学者)。事实上,我最终没有看到外部变量在这种情况下是无用的。同样感谢关于解除分配的其他信息,我不知道
Mat
只是我原始数据的一个薄包装,我需要释放它(OpenCV初学者)。事实上,我最终没有看到外部变量在这种情况下是无用的。同样感谢关于解除分配的其他信息,我不知道
Mat
只是我原始数据的一个薄包装,我需要释放它(OpenCV初学者)。事实上,我最终没有看到外部变量在这种情况下是无用的。还要感谢关于解除分配的其他信息,我不知道
Mat
只是我原始数据的一个薄包装,我需要释放它(OpenCV初学者)。