![](/img/trans.png)
[英]What is the best way to copy a vector of cv::Mat to a vector of float?
[英]Best way for overwritting cv::Mat data
目前我有这样的事情,因为我无法在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_mat
?
您无需在循环外分配任何内容。 您的代码应为:
for(;;) {
// Obtain raw data
Mat frame_mat(height, width, CV_8UC3, raw_data);
// Use frame_mat
}
在这种情况下,frame_mat只是raw_data的包装,允许您将其传递给OpenCV函数。 除了很小的恒定大小的标头之外,它不分配任何内存。 也不允许取消分配未分配的内存,因此请不要忘记在范围末尾释放raw_data。
还请记住,如果您更改frame_mat中的pixel值,那么raw_data也会更改。
您可以使用cv::Mat::at
分别分配每个元素cv::Mat::at
或使用cv::Mat::ptr
复制每一行的数据。 确保阅读文档,尤其是最后一篇文档。
请注意,这些方法最终可能会比仅创建临时方法(在打开优化功能时甚至可能被编译器删除)更慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.