Kinect2+QT5+opencv 将深度图显示在QLabel上

有两种方法
第一种是

 Qtemp = QImage((const unsigned char*)(img.data), img.cols, img.rows, img.step, QImage::Format_Indexed8);

第二种是

Qtemp = QImage((const unsigned char*)(img.data), img.cols, img.rows, img.step, QImage::Format_RGB16);
void MainWindow::on_pushButton_clicked()
{
    IKinectSensor * mySensor = nullptr;
    GetDefaultKinectSensor(&mySensor); //获取感应器
    mySensor->Open();//打开感应器

    IDepthFrameSource   * mySource = nullptr;   //取得深度数据
    mySensor->get_DepthFrameSource(&mySource);

    int     height = 0, width = 0;                  //取得宽和高
    IFrameDescription   * myDescription = nullptr;
    mySource->get_FrameDescription(&myDescription);
    myDescription->get_Height(&height);
    myDescription->get_Width(&width);

    IDepthFrameReader   * myReader = nullptr;
    mySource->OpenReader(&myReader);    //打开深度数据的Reader

    IDepthFrame * myFrame = nullptr;
    Mat temp(height, width, CV_16UC1);    //建立临时图像矩阵
    Mat img(height, width, CV_8UC1);
    
    QImage Qtemp;
    namedWindow("test", WINDOW_AUTOSIZE);
    while (1)
    {
        if (myReader->AcquireLatestFrame(&myFrame) == S_OK) //通过Reader尝试获取最新的一帧深度数据,放入深度帧中,并判断是否成功获取
        {
            myFrame->CopyFrameDataToArray(height * width, (UINT16 *)temp.data); //先把数据存入16位的图像矩阵中
            temp.convertTo(img, CV_8UC1);   //再把16位转换为8位
            imshow("test", img);
            
            /*显示图片再在Label上*/
            Qtemp = QImage((const unsigned char*)(img.data), img.cols, img.rows, img.step, QImage::Format_Indexed8);
            //设置图片大小和label的长宽一致
            Qtemp = Qtemp.scaled(ui->label->width(), ui->label->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
            //将图像显示在label上
            ui->label->setPixmap(QPixmap::fromImage(Qtemp));
            myFrame->Release();
        }

        if (waitKey(30) == VK_ESCAPE){break;}
        //释放资源
    }
    myReader->Release();
    myDescription->Release();
    mySource->Release();
    mySensor->Close();
    mySensor->Release();

}

效果图如下
在这里插入图片描述

第二种方式

void MainWindow::on_pushButton_clicked()
{
    IKinectSensor * mySensor = nullptr;
    GetDefaultKinectSensor(&mySensor); //获取感应器
    mySensor->Open();//打开感应器

    IDepthFrameSource   * mySource = nullptr;   //取得深度数据
    mySensor->get_DepthFrameSource(&mySource);

    int     height = 0, width = 0;                  //取得宽和高等下用
    IFrameDescription   * myDescription = nullptr;
    mySource->get_FrameDescription(&myDescription);
    myDescription->get_Height(&height);
    myDescription->get_Width(&width);

    IDepthFrameReader   * myReader = nullptr;
    mySource->OpenReader(&myReader);    //打开深度数据的Reader

    IDepthFrame * myFrame = nullptr;
    Mat img(height, width, CV_16UC1);
    QImage Qtemp;
    namedWindow("test", WINDOW_AUTOSIZE);
    
    while (1)
    {
        if (myReader->AcquireLatestFrame(&myFrame) == S_OK) //通过Reader尝试获取最新的一帧深度数据,放入深度帧中,并判断是否成功获取
        {
            myFrame->CopyFrameDataToArray(height * width, (UINT16 *)img.data); //先把数据存入16位的图像矩阵中
            /*显示图片再QLabel上*/
            Qtemp = QImage((const unsigned char*)(img.data), img.cols, img.rows, img.step, QImage::Format_RGB16);
            //设置图片大小和label的长宽一致
            Qtemp = Qtemp.scaled(ui->label->width(), ui->label->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
            //将图像显示在label上
            ui->label->setPixmap(QPixmap::fromImage(Qtemp));
            myFrame->Release();
        }

        if (waitKey(30) == VK_ESCAPE){break;}
        //释放资源
    }
    myReader->Release();
    myDescription->Release();
    mySource->Release();
    mySensor->Close();
    mySensor->Release();

}

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.该程序用QT开发,实现图片导入、显示、缩放、拖动及处理(冷暖色、灰度、亮度、饱和、模糊、锐化)。 经实测,我写的这个软件在导入10000*7096像素的超大图片的时候,缩放的速度比2345看图软件还快,2345缩放超大图会卡顿,但本软件不会^_^ 关于程序中缩放拖动部分的说面参见我的博客https://blog.csdn.net/weixin_43935474/article/details/89327314; 2.载入图片后,鼠标移动的时候可以显示鼠所在点的图像的坐标以及灰度; 3.缩放的时候,图片右上角可以显示当前图片的缩放比例; 4.用户可导入16位深的tiff灰度图文件(一般来说是由相机拍摄的灰度图数据),导入16位深的tiff的时候,用户需要先点击界面左上角的checkbox,然后再导入tiff图片,否则图片解析不出来。 注:Qt自带的QImage只能导入8位深的tiff灰度图,如果用qt的QImage导入16位深的灰度图,图像数据会被强制转换成argb格式的图像,数据就被更改了,所以我自己编写一个解析tiff文件的功能,我翻阅了很多博客,其中如下链接给我的帮助最大: https://blog.csdn.net/chenlu5201314/article/details/56276903 上述博客作为详细解析tiff文件结构的说明文档,写的非常详细,我也是根据上面的内容,自己编写了一个解析tiff文件的类(当然功能很少,只能解析符合特定条件的tiff文件) //************************************************************ //by Bruce Xu //注:解析tiff的类只解析特定的tiff文件! //1.解析的tiff文件中只存在一幅图,如果文件中存在多幅图,本类不支持解析! //2.图像数据为8位或16位深度的灰度图,如果是其他类型的图片,本类不支持解析! //3.图片没有被压缩过! //************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值