资源简介
快速实现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
- 上一篇:MIB文件解析
- 下一篇:C语言编写图形登陆界面
相关资源
- Kinect手势控制鼠标
- kinect2.0数据采集及点云生成代码C++
- Kinect c++试验版的切水果游戏
- KinectV2 实现鼠标控制VS2013 C++版
- MFC kinect 骨骼识别
- KinectV2彩色图片尺寸变换代码变换后与
- Kinect2.0采集图像帧并保存
- Kinect2.0 骨骼点获取
- Kinectv2 __MFC
- kinect+opengl 生成并显示点云
- Kinectv2_深度图和骨骼图源码
- Kinect2.0+PCL实现点云显示
- Kinect v2 跌到检测函数
- 基于Camshift+Kalman的多目标跟踪
- Kinect程序开发帮助文档C++
- 完整的实时深度图平滑代码像素滤波
- opencv2深度图滤波
- 基于kinect的人体动作识别系统
评论
共有 条评论