本文整理汇总了C++中UserGenerator::GetUserPixels方法的典型用法代码示例。如果您正苦于以下问题:C++ UserGenerator::GetUserPixels方法的具体用法?C++ UserGenerator::GetUserPixels怎么用?C++ UserGenerator::GetUserPixels使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UserGenerator
的用法示例。
在下文中一共展示了UserGenerator::GetUserPixels方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: prepare
XnStatus prepare(char useScene, char useDepth, char useHistogram)
{
//TODO handle possible failures!
if (useDepth)
{
mDepthGen.GetMetaData(depthMD);
nXRes = depthMD.XRes();
nYRes = depthMD.YRes();
pDepth = depthMD.Data();
if (useHistogram)
{
calcHist();
// rewind the pointer
pDepth = depthMD.Data();
}
}
if (useScene)
{
mUserGen.GetUserPixels(0, sceneMD);
nXRes = sceneMD.XRes();
nYRes = sceneMD.YRes();
pLabels = sceneMD.Data();
}
}
示例2: prepare
XnStatus prepare(char useScene, char useDepth, char useImage, char useIr, char useHistogram)
{
//TODO handle possible failures! Gotcha!
if (useDepth)
{
mDepthGen.GetMetaData(depthMD);
nXRes = depthMD.XRes();
nYRes = depthMD.YRes();
pDepth = depthMD.Data();
if (useHistogram)
{
calcHist();
// rewind the pointer
pDepth = depthMD.Data();
}
}
if (useScene)
{
mUserGen.GetUserPixels(0, sceneMD);
nXRes = sceneMD.XRes();
nYRes = sceneMD.YRes();
pLabels = sceneMD.Data();
}
if (useImage)
{
mImageGen.GetMetaData(imageMD);
nXRes = imageMD.XRes();
nYRes = imageMD.YRes();
pRGB = imageMD.RGB24Data();
// HISTOGRAM?????
}
if (useIr)
{
mIrGen.GetMetaData(irMD);
nXRes = irMD.XRes();
nYRes = irMD.YRes();
pIR = irMD.Data();
// HISTOGRAM????
}
}
示例3: Context
/*
* Class: org_OpenNI_Samples_Assistant_NativeMethods
* Method: initFromContext
* Signature: (JZZ)I
*/
JNIEXPORT jint JNICALL
Java_org_OpenNI_Samples_Assistant_NativeMethods_initFromContext
(JNIEnv *env, jclass cls, jlong pContext, jboolean _hasUserGen, jboolean _hasDepthGen)
{
LOGD("init_start");
hasUserGen = _hasUserGen;
hasDepthGen = _hasDepthGen;
mContext = new Context((XnContext*) pContext);
if (!(hasUserGen || hasDepthGen))
return XN_STATUS_BAD_PARAM;
int rc;
if (hasUserGen)
{
rc = mContext->FindExistingNode(XN_NODE_TYPE_USER, mUserGen);
if (rc != XN_STATUS_OK)
{
//TODO log&retval
printf("No user node exists!");
return 1;
}
mUserGen.GetUserPixels(0, sceneMD);
}
if (hasDepthGen)
{
rc = mContext->FindExistingNode(XN_NODE_TYPE_DEPTH, mDepthGen);
if (rc != XN_STATUS_OK)
{
//TODO log&retval
printf("No depth node exists! Check your XML.");
return 1;
}
mDepthGen.GetMetaData(depthMD);
}
initGraphics();
LOGD("init_end");
return XN_STATUS_OK;
}
示例4: run
/*
* Function: run
*
* Starts and continues generating data from the Kinect.
* A loop runs and updates data whenever new data is available from one of the Kinect
* devices, and then the data is processed to check for patient movement.
* The loop is controlled by the "quit" global boolean, which is set to false by the
* signal handler "stop()"
*/
void KinectMonitor::run() {
XnStatus status;
SceneMetaData scene;
DepthMetaData depth;
// Start the device
status = context.StartGeneratingAll();
// Running loop
while( !quit ) {
// Wait for any new incoming data
context.WaitOneUpdateAll(depthGenerator);
// Mark the new frame
xnFPSMarkFrame(&xnFPS);
// Get the depth data from the device
depthGenerator.GetMetaData(depth);
// Get the recognized users
XnUInt16 numUsers = 15;
XnUserID users[numUsers];
userGenerator.GetUsers(users, numUsers);
// Only track the patient if they are alone
if( numUsers != 1) continue;
// Get the user data
userGenerator.GetUserPixels(users[0], scene);
// Update patient position
previous = current;
current = getPosition(users[0]);
// Raise alerts based on the patient's state and position
if( previous != current ) {
if( current == TURNED && out == false ) {
// Patient is turned
printf("Patient getting out of bed.\n");
} else if( out && bedSet ) {
printf("Patient is out of bed.\n");
}
}
}
}
示例5: glutDisplay
void glutDisplay (void){
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Setup the OpenGL viewpoint
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
SceneMetaData sceneMD;
DepthMetaData depthMD;
ImageMetaData imageMD;
g_DepthGenerator.GetMetaData(depthMD);
glOrtho(0, depthMD.XRes(), depthMD.YRes(), 0, -1.0, 1.0);
glDisable(GL_TEXTURE_2D);
//XnStatus rc = g_Context.WaitOneUpdateAll(g_DepthGenerator);
XnStatus rc = g_Context.WaitAnyUpdateAll();
CHECK_RC("Wait Data",rc);
g_DepthGenerator.GetMetaData(depthMD);
if(g_UserGenerator.IsValid())
g_UserGenerator.GetUserPixels(0, sceneMD);
g_ImageGenerator.GetMetaData(imageMD);
DrawDepthMap(depthMD, sceneMD);
DrawImage(imageMD);
glutSwapBuffers();
}//glutdisplay
示例6: glutDisplay
//----------------------------------------------------
// 描画処理
//----------------------------------------------------
void glutDisplay (void){
xnFPSMarkFrame(&g_xnFPS); // FPSの計測開始?
XnStatus rc = XN_STATUS_OK;
// 更新されたノードを待つ(どれでもいい)
rc = g_context.WaitAnyUpdateAll();
if (rc != XN_STATUS_OK){
printf("Read failed: %s\n", xnGetStatusString(rc));
printf("test\n");
return;
}
// イメージ・デプス・ユーザのデータを取得
g_image.GetMetaData(g_imageMD);
g_depth.GetMetaData(g_depthMD);
g_user.GetUserPixels(0, g_sceneMD);
// カラー・デプスバッファをクリア
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 設定
setDepthHistgram(g_depth, g_depthMD, g_pDepthHist); // ヒストグラムの計算・作成
setTexture(); // テクスチャ設定
// 描画
drawImage(); // イメージデータの描画
// デバッグモードの文字は描画の行列と隔離
glMatrixMode(GL_PROJECTION); // 射影変換の行列の設定
//glLoadIdentity(); // スタックのクリア
glMatrixMode(GL_MODELVIEW); // モデルビュー変換の行列の設定
glLoadIdentity();
if(g_debugMode) glDebug(); // デバッグモード
// 一度だけスクリーンショットをとる
if(g_screenShotImageMode){
ostringstream fname;
fname << OUT_IMAGE_PATH ;//出力ファイル名
std::string name = fname.str();
g_glScreenShot.screenshot(name.c_str(), 24);
g_screenShotImageMode = !g_screenShotImageMode; // トグル
}
// 一度だけ深さデータを取得する
if(g_screenShotDepthMode){
ofstream ofs(OUT_DEPTH_PATH);
const XnDepthPixel* pDepth = g_depthMD.Data();
for (XnUInt y = 0; y < KINECT_IMAGE_HEIGHT; y ++){
for (XnUInt x = 0; x < KINECT_IMAGE_WIDTH; x ++, pDepth ++){
if(*pDepth < 2000){
ofs << (int)((*pDepth) * 2) << ',';
}else{
ofs << (*pDepth) << ',';
}
}
ofs << endl;
}
g_screenShotDepthMode = !g_screenShotDepthMode; // トグル
}
// Swap the OpenGL display buffers
glutSwapBuffers();
}
示例7: xnInit
//----------------------------------------------------
// OpenNI関連の初期化
//----------------------------------------------------
void xnInit(void){
XnStatus rc;
EnumerationErrors errors;
rc = g_context.InitFromXmlFile(SAMPLE_XML_PATH, &errors);
if (rc == XN_STATUS_NO_NODE_PRESENT){
XnChar strError[1024];
errors.ToString(strError, 1024);
printf("%s\n", strError);
exit(1);
}else if (rc != XN_STATUS_OK){
printf("Open failed: %s\n", xnGetStatusString(rc));
exit(1);
}
//playerInit();
rc = xnFPSInit(&g_xnFPS, 180); // FPSの初期化
//CHECK_RC(rc, "FPS Init");
// デプス・イメージ・ユーザジェネレータの作成
rc = g_context.FindExistingNode(XN_NODE_TYPE_DEPTH, g_depth);
errorCheck(rc, "g_depth"); // エラーチェック
rc = g_context.FindExistingNode(XN_NODE_TYPE_IMAGE, g_image);
errorCheck(rc, "g_image");
rc = g_context.FindExistingNode(XN_NODE_TYPE_USER, g_user);
//rc = g_user.Create(g_context);
errorCheck(rc, "g_user");
// ユーザー検出機能をサポートしているか確認
if (!g_user.IsCapabilitySupported(XN_CAPABILITY_SKELETON)) {
//throw std::runtime_error("ユーザー検出をサポートしてません");
cout << "ユーザー検出をサポートしてません" << endl;
exit(1);
}
// レコーダーの設定
//rc = setRecorder(g_recorder, rc);
// ユーザコールバックの登録
XnCallbackHandle userCallbacks;
g_user.RegisterUserCallbacks(UserDetected, UserLost, NULL, userCallbacks);
// デプス・イメージ・ユーザデータの取得
g_depth.GetMetaData(g_depthMD);
g_image.GetMetaData(g_imageMD);
g_user.GetUserPixels(0, g_sceneMD);
// Hybrid mode isn't supported in this sample
// イメージとデプスの大きさが違うとエラー
if (g_imageMD.FullXRes() != g_depthMD.FullXRes() || g_imageMD.FullYRes() != g_depthMD.FullYRes()){
printf ("The device depth and image resolution must be equal!\n");
exit(1);
}
// RGB is the only image format supported.
// フォーマットの確認
if (g_imageMD.PixelFormat() != XN_PIXEL_FORMAT_RGB24){
printf("The device image format must be RGB24\n");
exit(1);
}
// Texture map init
// フルスクリーン画面の大きさ調整
g_nTexMapX = (((unsigned short)(g_depthMD.FullXRes() - 1) / 512) + 1) * 512; // 大きさによって512の倍数に調整(1024)
g_nTexMapY = (((unsigned short)(g_depthMD.FullYRes() - 1) / 512) + 1) * 512; // 512
g_pTexMap = (XnRGB24Pixel*)malloc(g_nTexMapX * g_nTexMapY * sizeof(XnRGB24Pixel)); // スクリーンの大きさ分の色情報の容量を確保
// 座標ポインタの初期化
g_pPoint = (XnPoint3D*)malloc(KINECT_IMAGE_SIZE * sizeof(XnPoint3D)); // 座標を入れるポインタを作成
g_pBackTex = (XnRGB24Pixel*)malloc(KINECT_IMAGE_SIZE * sizeof(XnRGB24Pixel)); // 背景画像を入れるポインタを作成
g_pBackPoint = (XnPoint3D*)malloc(KINECT_IMAGE_SIZE * sizeof(XnPoint3D)); // 背景座標を入れるポインタを作成
g_pBackDepth = (XnDepthPixel*)malloc(KINECT_IMAGE_SIZE * sizeof(XnDepthPixel)); // 背景座標を入れるポインタを作成
}
示例8: captureDepthMap
void captureDepthMap(unsigned char* g_ucDepthBuffer)
{
SceneMetaData smd;
DepthMetaData dmd;
_depth.GetMetaData(dmd);
//printf("AS3OpenNI :: Frame %d Middle point is: %u. FPS: %f\n", dmd.FrameID(), dmd(dmd.XRes() / 2, dmd.YRes() / 2), xnFPSCalc(&xnFPS));
_depth.GetMetaData(dmd);
_userGenerator.GetUserPixels(0, smd);
unsigned int nValue = 0;
unsigned int nHistValue = 0;
unsigned int nIndex = 0;
unsigned int nX = 0;
unsigned int nY = 0;
unsigned int nNumberOfPoints = 0;
XnUInt16 g_nXRes = dmd.XRes();
XnUInt16 g_nYRes = dmd.YRes();
const XnDepthPixel* pDepth = dmd.Data();
const XnLabel* pLabels = smd.Data();
// Calculate the accumulative histogram
memset(g_pDepthHist, 0, MAX_DEPTH*sizeof(float));
for (nY=0; nY<g_nYRes; nY++)
{
for (nX=0; nX<g_nXRes; nX++)
{
nValue = *pDepth;
if (nValue != 0)
{
g_pDepthHist[nValue]++;
nNumberOfPoints++;
}
pDepth++;
}
}
for (nIndex=1; nIndex<MAX_DEPTH; nIndex++)
{
g_pDepthHist[nIndex] += g_pDepthHist[nIndex-1];
}
if (nNumberOfPoints)
{
for (nIndex=1; nIndex<MAX_DEPTH; nIndex++)
{
g_pDepthHist[nIndex] = (unsigned int)(256 * (1.0f - (g_pDepthHist[nIndex] / nNumberOfPoints)));
}
}
pDepth = dmd.Data();
if (_drawPixels)
{
XnUInt32 nIndex = 0;
for (nY=0; nY<g_nYRes; nY++)
{
for (nX=0; nX < g_nXRes; nX++, nIndex++)
{
g_ucDepthBuffer[0] = 0;
g_ucDepthBuffer[1] = 0;
g_ucDepthBuffer[2] = 0;
g_ucDepthBuffer[3] = 0x00;
if (_depthMapBackground || *pLabels != 0)
{
nValue = *pDepth;
XnLabel label = *pLabels;
XnUInt32 nColorID = label % nColors;
if (label == 0)
{
nColorID = nColors;
}
if (nValue != 0)
{
nHistValue = g_pDepthHist[nValue];
if(_depthMapDetect)
{
g_ucDepthBuffer[0] = nHistValue * Colors[nColorID][0];
g_ucDepthBuffer[1] = nHistValue * Colors[nColorID][1];
g_ucDepthBuffer[2] = nHistValue * Colors[nColorID][2];
}
else
{
g_ucDepthBuffer[0] = nHistValue;
g_ucDepthBuffer[1] = nHistValue;
g_ucDepthBuffer[2] = nHistValue;
}
g_ucDepthBuffer[3] = 0xFF;
}
}
pDepth++;
pLabels++;
g_ucDepthBuffer+=4;
}
}
}
}
示例9: updatePixels
void OpenNIUser::updatePixels()
{
// Get device generators
DepthGenerator* depth = _device->getDepthGenerator();
UserGenerator* user = _device->getUserGenerator();
// Get metadata
//xn::DepthMetaData depthMetaData;
//depth->GetMetaData( depthMetaData );
xn::DepthMetaData* depthMetaData = _device->getDepthMetaData();
xn::SceneMetaData* sceneMetaData = _device->getUserMetaData();
// Get Center Of Mass
XnPoint3D com;
user->GetCoM( mId, com );
// Convert to screen coordinates
depth->ConvertRealWorldToProjective( 1, &com, &com );
mCenter[0] = com.X;
mCenter[1] = com.Y;
mCenter[2] = com.Z;
if( _enablePixels )
{
// Get user pixels
user->GetUserPixels( mId, *sceneMetaData );
//xn::SceneMetaData sceneMetaData;
//user->GetUserPixels( mId, sceneMetaData );
// Get labels
const XnLabel* labels = sceneMetaData->Data();
if( labels )
{
//
// Generate a bitmap with the user pixels colored
//
uint16_t* pDepth = _device->getDepthMap();
int depthWidth = depthMetaData->XRes();
int depthHeight = depthMetaData->YRes();
if( !_userPixels || (mWidth != depthWidth) || (mHeight != depthHeight) )
{
mWidth = depthWidth;
mHeight = depthHeight;
allocate( depthWidth, depthHeight );
}
xnOSMemSet( _backUserPixels, 0, depthWidth*depthHeight*3 );
uint8_t* pixels = _backUserPixels;
int index = 0;
for( int j=0; j<depthHeight; j++ )
{
for( int x=0; x<depthWidth; x++ )
{
// Only fill bitmap with current user's data
/*if( *labels != 0 && *labels == mId )
{
// Pixel is not empty, deal with it.
uint32_t nValue = *pDepth;
mColor[0] = g_Colors[mId][0];
mColor[1] = g_Colors[mId][1];
mColor[2] = g_Colors[mId][2];
if( nValue != 0 )
{
int nHistValue = _device->getDepthMap24()[nValue];
pixels[index+0] = 0xff & static_cast<uint8_t>(nHistValue * mColor[0]);//g_Colors[nColorID][0]);
pixels[index+1] = 0xff & static_cast<uint8_t>(nHistValue * mColor[1]);//g_Colors[nColorID][1]);
pixels[index+2] = 0xff & static_cast<uint8_t>(nHistValue * mColor[2]);//g_Colors[nColorID][2]);
}
}****/
// Check out for every user visible and fill bitmap with correct coloring
// NOTE! This should be removed in the future. User should only know about its own data and not all
if( *labels != 0 )
{
// Pixel is not empty, deal with it.
uint32_t nValue = *pDepth;
XnLabel label = *labels;
XnUInt32 nColorID = label % nColors;
if( label == 0 )
{
nColorID = nColors;
}
mColor[0] = g_Colors[mId][0];
mColor[1] = g_Colors[mId][1];
mColor[2] = g_Colors[mId][2];
if( nValue != 0 )
{
int nHistValue = _device->getDepthMap24()[nValue];
pixels[index+0] = 0xff & static_cast<uint8_t>(nHistValue * g_Colors[nColorID][0]);
pixels[index+1] = 0xff & static_cast<uint8_t>(nHistValue * g_Colors[nColorID][1]);
pixels[index+2] = 0xff & static_cast<uint8_t>(nHistValue * g_Colors[nColorID][2]);
}
}
//.........这里部分代码省略.........