繁体   English   中英

在 cv::Mat 中控制图像数据内存

[英]Control image data memory in cv::Mat

我正在使用 OpenCv 为图像处理项目构建管道。 在我的一个课程中,我生成了一个图像:

m_RGBMatData = cv::Mat(cv::Size(1824, 948), CV_16U);

我想将其数据保存在缓冲区中。 我在缓冲区上使用的指针称为m_host_Rgb这在我执行时有效

memcpy(m_host_Rgb, m_RGBMatData.data, 1824 * 948 * 3 * 2); =>(16 位 RGB 图像!)

但我想避免使用memcpy函数来提高性能。 我试过这个:

m_host_Rgb = m_RGBMatData.data;

但我认为cv::Mat对象在超出范围时会删除其内存。 有没有办法保持cv::Mat对象的内存直到下一次调用? 或类似的东西?

谢谢!

如果您想自己管理内存,那么正如 Dan Mašek 的评论所建议的那样,您可以为 cv::Mat使用不同的构造函数

#include <cstdint>

uint16_t* m_host_Rgb = new uint16_t[1824 * 948 * 3];
cv::Mat m_RGBMatData(1824, 948, CV_16UC3, (void*) m_host_Rgb);

即使在m_RGBMatData超出范围之后,您仍然可以使用m_host_Rgb ,因为您自己管理其内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM