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 的评论 suggested, you can use a different constructor for 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,因为您自己管理它的内存。