我有一个接收pangolin::Image
格式rgbd图像的应用程序。我想寄一个cv::Mat
。如何将cv :: Mat转换为pangolin :: Image?
(穿山甲:https://github.com/stevenlovegrove/Pangolin)
图片标题:
https://github.com/stevenlovegrove/Pangolin/blob/master/include/pangolin/image/image.h
目前的格式是:
pangolin::ManagedImage<unsigned short> firstData(640, 480);
pangolin::Image<unsigned short> firstRaw(firstData.w, firstData.h, firstData.pitch, (unsigned short*)firstData.ptr);
然后通过应用程序发送firstRaw
。
如果我现在有:
cv::Mat frame = cv::imread(filepath,0);
从frame
到firstRaw
的转换是什么?
我是这样开始的:
int loadDepthFromMat(cv::Mat filepath, pangolin::Image<unsigned short> & depth)
{
int width = filepath.cols;
int height = filepath.rows;
pangolin::ManagedImage<unsigned short> depthRaw(width, height);
pangolin::Image<unsigned short> depthRaw16((unsigned short*)depthRaw.ptr, depthRaw.w, depthRaw.h, depthRaw.w * sizeof(unsigned short));
//copy data
}
谢谢。
答案 0 :(得分:2)
因此,假设您已将cv :: Mat转换为具有正确音高(或OpenCV中的通道)的无符号短格式,您只需使用memcpy。
(我已经将你的cv :: Mat从filepath重命名为mat(为什么它被称为filepath?)):
memcpy((void*)depthRaw16.begin(), (void*)mat.data, mat.total() * mat.elemSize());
再次,确定你的穿山甲图片具有相同的尺寸,确定 cv :: Mat转换为无符号短文。