C++ 将cv::Mat转换为穿山甲::图像?

C++ 将cv::Mat转换为穿山甲::图像?,c++,opencv,C++,Opencv,我有一个应用程序,它接收pangolin::Image格式的rgbd图像。我想寄一份cv::Mat。如何将cv::Mat转换为穿山甲::图像 (穿山甲:) 图像标题: 目前的格式是: pangolin::ManagedImage<unsigned short> firstData(640, 480); pangolin::Image<unsigned short> firstRaw(firstData.w, firstData.h, firstData.pit

我有一个应用程序,它接收
pangolin::Image
格式的rgbd图像。我想寄一份
cv::Mat
。如何将cv::Mat转换为穿山甲::图像

(穿山甲:)

图像标题:

目前的格式是:

pangolin::ManagedImage<unsigned short> firstData(640, 480);

    pangolin::Image<unsigned short> firstRaw(firstData.w, firstData.h, firstData.pitch, (unsigned short*)firstData.ptr);

谢谢。

所以,假设您已将cv::Mat转换为具有正确音高的无符号短格式(或OpenCV中的通道),您只需使用memcpy即可

(我已将您的cv::Mat从filepath重命名为Mat(为什么称为filepath?)


再次强调,确保穿山甲图像具有相同的尺寸,并且确保cv::Mat转换为无符号短格式。

因此,假设您已将cv::Mat转换为具有正确音高(或频道,在OpenCV中)的无符号短格式,您只需使用memcpy即可

(我已将您的cv::Mat从filepath重命名为Mat(为什么称为filepath?)


同样,确保穿山甲图像具有相同的尺寸,并且确保cv::Mat转换为无符号短格式。

假设穿山甲::图像位于主机/cpu内存中,在确保已分配穿山甲图像后,只需在数据指针上使用memcpy()。请确保先将OpenCV图像转换为未签名的短格式。谢谢您的回复。如果您有时间,可以给我举个例子吗?假设pangolin::Image位于主机/cpu内存中,在确保已分配pangolin映像后,只需在数据指针上使用memcpy()。请确保先将OpenCV图像转换为未签名的短格式。谢谢您的回复。如果你有时间,能给我举个例子吗?谢谢!因此,只要我用:
int width=mat.cols设置
Image
;int height=垫行;穿山甲:管理年龄深度(宽度、高度),我应该没事吧?现在我只需要找到UShort转换。。。再次感谢。。添加
int channels=mat.channels()
穿山甲::Image firstRaw(宽度、高度、通道,(无符号短*)firstData.ptr)您需要cv::Mat::convertTo。因此,实例化一个新的cv::Mat(例如Mat_ushort),并执行Mat.convertTo(Mat_ushort,cv_16UC1);(用于灰度)或材质转换(材质为ushort,CV为16UC3);(适用于RGB)或CV_16UC4(如果您有RGBA)。然后将新的cv::Mat用于memcpy操作。使用convertTo将设置channels()属性,手动设置它将不起任何作用。非常好!非常感谢您抽出时间。(对于其他执行此操作的人,您需要在将Mat.channels()读入var之前转换Mat类型)谢谢!因此,只要我用:
int width=mat.cols设置
Image
;int height=垫行;穿山甲:管理年龄深度(宽度、高度),我应该没事吧?现在我只需要找到UShort转换。。。再次感谢。。添加
int channels=mat.channels()
穿山甲::Image firstRaw(宽度、高度、通道,(无符号短*)firstData.ptr)您需要cv::Mat::convertTo。因此,实例化一个新的cv::Mat(例如Mat_ushort),并执行Mat.convertTo(Mat_ushort,cv_16UC1);(用于灰度)或材质转换(材质为ushort,CV为16UC3);(适用于RGB)或CV_16UC4(如果您有RGBA)。然后将新的cv::Mat用于memcpy操作。使用convertTo将设置channels()属性,手动设置它将不起任何作用。非常好!非常感谢您抽出时间。(对于其他执行此操作的人,您需要在将Mat.channels()读入var之前转换Mat类型)
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 

}
memcpy((void*)depthRaw16.begin(), (void*)mat.data, mat.total() * mat.elemSize());