将cv :: Mat转换为openni :: VideoFrameRef

反对

我有一个kinect将数据流式传输到cv::Mat我正在尝试运行一些使用OpenNI的示例代码。

我可以通过某种方式将Mat转换为OpenNI格式的图像吗?

我只需要深度图像,并且在与OpenNI战斗了很长时间之后,就放弃了安装它。

我正在使用Windows的OpenCV 3,Visual Studio 2013,Kinect v2。

相关代码为:

void CDifodoCamera::loadFrame()
{
    //Read the newest frame
    openni::VideoFrameRef framed; //I assume I need to replace this with my Mat...
    depth_ch.readFrame(&framed);

    const int height = framed.getHeight();
    const int width = framed.getWidth();

    //Store the depth values
    const openni::DepthPixel* pDepthRow = (const openni::DepthPixel*)framed.getData();
    int rowSize = framed.getStrideInBytes() / sizeof(openni::DepthPixel);

    for (int yc = height-1; yc >= 0; --yc)
    {
        const openni::DepthPixel* pDepth = pDepthRow;
        for (int xc = width-1; xc >= 0; --xc, ++pDepth)
        {
            if (*pDepth < 4500.f)
                depth_wf(yc,xc) = 0.001f*(*pDepth);

            else
                depth_wf(yc,xc) = 0.f;
        }

        pDepthRow += rowSize;
    }
}
api55

首先,您需要了解数据的传输方式...如果已经在cv::Mat接收数据,则应该接收两张图像,其中一张用于RGB信息,通常是3通道uchar cv::Mat,另一张用于深度信息,通常将其保存在其中。以毫米为单位的16位表示形式(您不能将浮子垫另存为图像,但是可以使用opencv保存为yml / xml文件)。

假设您要读取和处理包含深度信息的图像,可以将代码更改为:

void CDifodoCamera::loadFrame()
{
    //Read the newest frame
    //the depth image should be png since it is the one which supports 16 bits and it must have the ANYDEPTH flag
    cv::Mat depth_im = cv::imread("img_name.png",CV_LOAD_IMAGE_ANYDEPTH); 

    const int height = depth_im.rows;
    const int width = depth_im.cols;

    for (int y = 0; y < height; y++)
    {
        for (int x = 0; x < width; x++)
        {
            if (depth_im<unsigned short>(y,x) < 4500)
                depth_wf(y,x) = 0.001f * (float)depth_im<unsigned short>(y,x);

            else
                depth_wf(y,x) = 0.f;
        }
    }
}

我希望这可以帮助你。如果您有任何问题,请问:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将cv :: Mat转换为openni :: VideoFrameRef

来自分类Dev

将cv :: Mat转换为MTLTexture

来自分类Dev

将cv :: Mat转换为ipcMatrix <ipcRGB>

来自分类Dev

将OGRE :: Image转换为cv :: Mat

来自分类Dev

c ++将cv :: Mat从CV_8U转换为CV_32F

来自分类Dev

将numpy.ndarray转换为opencv cv :: Mat

来自分类Dev

将cv :: Mat转换为SDL_Texture

来自分类Dev

如何将'cv :: Mat'转换为'double'?

来自分类Dev

将Boost数组转换为Open CV Mat

来自分类Dev

如何将cv :: Mat转换为MFC CBitmap

来自分类Dev

Libcurl C ++将std :: string转换为cv :: Mat对象

来自分类Dev

将 uint64_t 转换为 cv::mat

来自分类Dev

如何将图像 uri 转换为 cv::Mat

来自分类Dev

从cv :: Mat转换为arma :: mat

来自分类Dev

如何正确地将cv :: Mat转换为CV_8UC1?

来自分类Dev

如何将cv :: Mat类型从CV_16UC1转换为CV_8UC1

来自分类Dev

将类型'Emgu.CV.Mat'转换为'Emgu.CV.Image <Emgu.CV.Structure.Bgr,byte>'

来自分类Dev

无法从'cv :: Mat *'转换为'const cv :: Mat'

来自分类Dev

如何从CVPixelBufferRef转换为openCV cv :: Mat

来自分类Dev

从cv :: Mat转换为QImage的快速方法

来自分类Dev

cv :: MAT如何转换为NHCW格式?

来自分类Dev

如何在OpenCV3.0中将CvMat *转换为cv :: Mat

来自分类Dev

将ndarray转换为cv :: Mat的最简单方法是什么?

来自分类Dev

通过使用原始数据将QImage转换为cv :: Mat

来自分类Dev

需要更快的方法将cv :: Mat转换为一维矢量形式

来自分类Dev

如何正确地将cv :: Mat转换为具有完美值匹配的Torch :: Tensor?

来自分类Dev

将CVImageBufferRef YUV 420转换为cv :: Mat RGB并将其显示在CALayer中?

来自分类Dev

将 cv::Mat 转换为 TensorFlow Tensor 时,“.exe 已触发断点”

来自分类Dev

如何将屏幕截图位图转换为 cv::Mat

Related 相关文章

热门标签

归档