• 大小: 1.51MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-13
  • 语言: 其他
  • 标签: kinect  Qt  

资源简介

COpenNI这个类主要是初始化kinect设备,并获取深度图像和颜色图像,参加上一篇博客的初始化过程步骤,如果遇到错误,则有相应的错误处理过程。CKinectReader类是将COpenNI这个类读取到的结果显示在Qt的界面上的。因此一个类是负责与硬件Kinect打交道,一个类是负责与人(界面显示)打交道的。具体的过程见上篇文章的分析和后面的代码。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include “copenni.cpp“  //要包含cpp文件,不能直接包含类
#include 

using namespace std;

class CKinectReader: public Qobject
{
public:
    //构造函数用构造函数中的变量给类的私有成员赋值
    CKinectReader(COpenNI &openni QGraphicsScene &scene) : openni(openni) scene(scene) {
        test = 0.0;
    }
    ~CKinectReader() {
        scene.removeItem(image_item);
        scene.removeItem(depth_item);
        delete [] p_depth_argb;
    }
    bool Start(int interval = 33) {
        openni.Start();//因为在调用CKinectReader这个类的之前会初始化好的所以这里直接调用Start了
        image_item = scene.addPixmap(QPixmap());
        image_item->setZValue(1);
        depth_item = scene.addPixmap(QPixmap());
        depth_item->setZValue(2);
        openni.UpdateData();
        p_depth_argb = new uchar[4*openni.depth_metadata.XRes()*openni.depth_metadata.YRes()];
        startTimer(interval);//这里是继承Qobject类,因此可以调用该函数
        return true;
    }
    float test ;
private:
    COpenNI &openni;    //定义引用同时没有初始化因为在构造函数的时候用冒号来初始化
    QGraphicsScene &scene;
    QGraphicsPixmapItem *image_item;
    QGraphicsPixmapItem *depth_item;
    uchar *p_depth_argb;

private:
    void timerEvent(QTimerEvent *) {

        openni.UpdateData();
        //这里使用const,是因为右边的函数返回的值就是const类型的
        const XnDepthPixel *p_depth_pixpel = openni.depth_metadata.Data();
        unsigned int size = openni.depth_metadata.XRes()*openni.depth_metadata.YRes();

        //找深度最大值点
        XnDepthPixel max_depth = *p_depth_pixpel;
        for(unsigned int i = 1; i < size; ++i)
            if(p_depth_pixpel[i] > max_depth )
                max_depth = p_depth_pixpel[i];
        test = max_depth;

        //将深度图像格式归一化到0~255
        int idx = 0;
        for(unsigned int i = 1; i < size; ++i) {
            //一定要使用1.0f相乘,转换成float类型,否则该工程的结果会有错误因为这个要么是0,要么是1,0的概率要大很多
            float fscale = 1.0f*(*p_depth_pixpel)/max_depth;
            if((*p_depth_pixpel) != 0) {
                p_depth_argb[idx++] = 255*(1-fscale);    //蓝色分量
                p_depth_argb[idx++] = 0; //绿色分量
                p_depth_argb[idx++] = 255*fscale;   //红色分量,越远越红
                p_depth_argb[idx++] = 255*(1-fscale); //距离越近,越不透明
            }
            else {
                p_depth_argb[idx++] = 0;
                p_depth_argb[idx++] = 0;
                p_depth_argb[idx++] = 0;
                p_depth_argb[idx++] = 255;
            }
            ++p_depth_pixpel;//此处的++p_depth_pixpel和p_depth_pixpel++是一样的
        }
        //往item中设置图像色彩数据
        image_item->setPixmap(QPixmap::fromImage(
                              QImage(openni.image_metadata.Data() openni.image_metadata.XRes() openni.image_metadata.YRes()
                              QImage::Format_RGB888)));
        //往item中设置深度数据
        depth_item->setPixmap(QPixmap::fromImage(
                              QImage(p_depth_argb openni.depth_metadata.XRes() openni.depth_meta

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     326178  2012-09-29 09:47  Kinect+OpenNI学习笔记之3(获取kinect的数据并在Qt中显示的类的设计).pdf

     文件       3325  2012-09-29 09:21  copenni\ckinectreader.cpp

     文件       2132  2012-09-29 09:01  copenni\copenni.cpp

     文件        274  2012-09-28 14:39  copenni\copenni.pro

     文件      17538  2012-09-29 09:49  copenni\copenni.pro.user

     文件     142455  2012-09-29 09:21  copenni\debug\ckinectreader.obj

     文件      49664  2012-09-29 09:21  copenni\debug\copenni.exe

     文件     576700  2012-09-29 09:21  copenni\debug\copenni.ilk

     文件        638  2012-09-29 09:21  copenni\debug\copenni.intermediate.manifest

     文件     142307  2012-09-29 09:21  copenni\debug\copenni.obj

     文件    2477056  2012-09-29 09:21  copenni\debug\copenni.pdb

     文件       2030  2012-09-28 14:38  copenni\debug\copnni.obj

     文件     230439  2012-09-29 09:21  copenni\debug\main.obj

     文件        533  2012-09-29 08:53  copenni\main.cpp

     文件       7083  2012-09-28 15:10  copenni\Makefile

     文件       6015  2012-09-28 15:10  copenni\Makefile.Debug

     文件       6023  2012-09-28 15:10  copenni\Makefile.Release

     文件    1970176  2012-09-29 09:21  copenni\vc100.pdb

     目录          0  2012-09-29 09:49  copenni\debug

     目录          0  2012-09-29 09:49  copenni\release

     目录          0  2012-09-29 09:49  copenni

----------- ---------  ---------- -----  ----

              5960566                    21


评论

共有 条评论