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
,因为您自己管理它的内存。
我正在使用 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
,因为您自己管理它的内存。