opengl绘制opencv处理的数据点

原创 2013年12月03日 22:21:17

#include <iostream>  

#include <stdlib.h>  

#include <cv.h>  
#include <cxcore.h>  
#include <highgui.h>  
#include <math.h>  

#include <GL/glut.h>    

using namespace std; 


float imgdata[500][500]; 
int w=0; 
int h=0; 
//float scalar=50;//scalar of converting pixel color to float coordinates  
float scalar=30;

void renderScene(void) { 

 glClear (GL_COLOR_BUFFER_BIT); 
 glLoadIdentity();// Reset the coordinate system before modifying   
 gluLookAt (0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 
 //glRotatef(-30, 0.0, 1.0, 0.0); //rotate about the x axis  
 glRotatef(-180, 0.0, 0.0, 1.0); //rotate about the z axis  
 glRotatef(-180, 0.0, 1.0, 0.0); //rotate about the y axis  

 float imageCenterX=w*.5; 
 float imageCenterY=h*.5; 
 float x,y,z; 

 glPointSize(1.0);  
 glBegin(GL_POINTS);//GL_POINTS  
 for (int i=0;i<h;i++){  
  for (int j=0;j<w;j++){ 
   // color interpolation   
   glColor3f(1-imgdata[i][j]/255, imgdata[i][j]/255, imgdata[i][j]/255); 
   x=((float)j-imageCenterX)/scalar; 
   y=((float)i-imageCenterY)/scalar; 
   z=imgdata[i][j]/scalar;  
   glVertex3f(x,y,z);  
  } 
 } 
 glEnd(); 
 glFlush(); 

 

void reshape (int w, int h) { 
 glViewport (0, 0, (GLsizei)w, (GLsizei)h); 
 glMatrixMode (GL_PROJECTION); 
 glLoadIdentity (); 
 gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0); 
 glMatrixMode (GL_MODELVIEW); 


void displayDisparity(IplImage* disparity){ 

 double xyscale=100; 
 int j=0; 
 int i=0; 
 CvScalar s; 

 //accessing the image pixels  
 for (i=0;i<h;i++){  
  for (j=0;j<w;j++){ 
   s=cvGet2D(disparity,i,j); 
   imgdata[i][j]=s.val[0];//for disparity is a grey image.  
  } 
 }  


int main(int argc, char *argv[])  
{   
 cout << "OpenCV and OpenGL working together!"<<endl;  
 char* filename="1.jpg"; 
 IplImage* imgGrey = cvLoadImage(filename,0); //read image as a grey one   
 if (imgGrey==NULL){ 
  cout << "No valid image input."<<endl;  
  char c=getchar(); 
  return 1; 
 }  
 w=imgGrey->width; 
 h=imgGrey->height; 

 displayDisparity(imgGrey);  
 cvNamedWindow("original", CV_WINDOW_AUTOSIZE ); 
 cvShowImage( "original", imgGrey ); 

 //------------------OpenGL-------------------------  
 glutInit(&argc, argv); 
 glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); 
 glutInitWindowPosition(100,100); 
 glutInitWindowSize(500,500); 
 glutCreateWindow("3D disparity image"); 
 glutDisplayFunc(renderScene); 

 glutReshapeFunc (reshape); 
 glutMainLoop(); 


 cvWaitKey(0);  
 //release opencv stuff.  
 cvReleaseImage(&imgGrey); 
 cvDestroyWindow("Original"); 

 return 0;  

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于OpenNI2和OpenCV2的那些事——获取三维点云数据并用OpenGL表示

上一节呢,我们利用openni2获得了彩色图像和深度图像,这一节我们用openni2的转换函数将深度数据转换为三维点云,然后用彩色数据作为纹理将点云用opengl画出来。 首先介绍Coordinate...

OpenGL与OpenCV间传输图像数据

之前一直苦于寻找OpenGL与OpenCV间的数据传输方法,对这两个库运用得不是很熟,在网上找的的方法却是OpenCV往OpenGL传输纹理和数据,即OpenCV把图做出来然后把数据传给OpenGL,...
  • cyxcw1
  • cyxcw1
  • 2013-05-11 21:23
  • 2131

将opengl的绘制效果利用OpenCV、Matlab保存成图片

opengl中有一个非常有用的函数:glReadPixels(),可以读取各种缓冲区(深度、颜色,etc)的数值。要将opengl的绘制场景保存成图片,也需要使用这个函数。     一个简单的例子见如...

HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenGL和OpenCV区别

OpenGL和OpenCV 一、OpenGL OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图像(二维的亦可)...

HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenGL和OpenCV区别

http://blog.csdn.net/feixiang_john/article/details/8086719 OpenGL和OpenCV 一、OpenGL Ope...

OpenGL三维球体体数据生成与绘制

#include #include #include #include #include #include #include #include #include #include usin...

用多边形近似球体表面(icosphere)的Mesh数据的生成并使用openGL绘制

这里用到的Mesh数据结构如果不清楚可以参照我的上一篇。 参考了一个牛人的文章, 他的代码是C#的,我用C++改写了一遍,为了便于理解,省去了他的cache优化。创建网格球面一般3D球体的建模有两种...

OpenCV 自动检测 数据处理

  • 2014-04-14 09:35
  • 550KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)