• 大小: 12KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-16
  • 语言: C/C++
  • 标签: kinect  

资源简介

快速实现kinect的三维重建,使用opencv和openGL和openNI实现三维重建。文中有一个CPP文件,是经过修改过的。绝对好用

资源截图

代码片段和文件信息

// Kinect_glTest.cpp : Defines the entry point for the console application.
//


#include “stdafx.h“

#include 
#include “opencv2/highgui/highgui.hpp“
#include “opencv2/imgproc/imgproc.hpp“
#include “opencv2/calib3d/calib3d.hpp“
#include 

using namespace std;
using namespace cv;


//////////////////////////////////////////////////////////////////////////
// 
//---OpenGL 全局变量
float xyzdata[480][640][3];
float texture[480][640][3];
int glWinWidth = 640 glWinHeight = 480;
int width=640 height=480;
double eyex eyey eyez atx aty atz;  // eye* - 摄像机位置,at* - 注视点位置

bool leftClickHold = false rightClickHold = false;
int mxmy;  // 鼠标按键时在 OpenGL 窗口的坐标
int ry=10 rx=10;    // 摄像机相对注视点的观察角度
double mindepth maxdepth; // 深度数据的极值 
double radius = 4000.0; // 摄像机与注视点的距离



/************************************************************************/
/*                                           OpenGL响应函数                                                 */
/************************************************************************/

//////////////////////////////////////////////////////////////////////////
// 鼠标按键响应函数
void mouse(int button int state int x int y)
{
if(button == GLUT_LEFT_BUTTON)
{
if(state == GLUT_DOWN)
{
leftClickHold=true;
}
else
{
leftClickHold=false;
}
}

if (button== GLUT_RIGHT_BUTTON)
{
if(state == GLUT_DOWN)
{
rightClickHold=true;
}
else
{
rightClickHold=false;
}
}
}

//////////////////////////////////////////////////////////////////////////
// 鼠标运动响应函数
void motion(int x int y)
{
if(leftClickHold==true)
{
if( x-mx > 0 )
{
rx += 5;
}
else if( x-mx < 0 )
{
rx -= 5;
}
if( y-my > 0 )
{
ry += 5;
}
else if( y-my < 0 )
{
ry -= 5;
}
mx=x;
my=y;
glutPostRedisplay();
}

if(rightClickHold==true)
{
if( y-my > 0 )
{
radius += 100.0;
}
else if( y-my < 0 )
{
radius -= 100.0;
}
radius = std::max( radius 100.0 );
mx=x;
my=y;
glutPostRedisplay();
}
}

//////////////////////////////////////////////////////////////////////////
// 三维图像显示响应函数
void renderScene(void) 
{
// clear screen and depth buffer
glClear (GL_COLOR_BUFFER_BIT );
// Reset the coordinate system before modifying 
glLoadIdentity();
// set the camera position
atx = 0;
aty = 0;
atz = ( mindepth - maxdepth ) / 2.0f;
eyex = atx + radius * sin( CV_PI * rx / 180.0f ); 
eyey = atx + radius * cos( CV_PI * ry/ 180.0f ); 
eyez = atz + radius;
gluLookAt (eyex eyey eyez 0 0 atz 0.0 1.0 0.0);
glRotatef(0010);
glRotatef(-180100);

float xyz;
// 绘制图像点云
glPointSize(1.0); 
glBegin(GL_POINTS);
for (int i=0;i for (int j=0;j // color interpolation 
glColor3f(texture[i][j][0]/255 texture[i][j][1]/255 texture[i][j][2]/255);
x= xyzdata[i][j][0];
y= xyzdata

评论

共有 条评论