資源簡介
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?????????????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?????????????//一定要使用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
評論
共有 條評論