/*

灰度图转换为高度图,为双目视觉三维重建做准备。

*/

#include <iostream>

#include <stdlib.h>  
//#include <cv.h>  
//#include <cxcore.h>  
//#include <highgui.h>  
#include "opencv2/calib3d/calib3d.hpp"    
#include "opencv2/imgproc/imgproc.hpp"    
#include "opencv2/highgui/highgui.hpp"    
#include "opencv2/contrib/contrib.hpp"   
#include <cmath>  
#include <glut.h>    
#include <iostream>

#pragma comment(lib,"opencv_highgui248.lib")    
#pragma comment(lib,"opencv_core248.lib")    
#pragma comment(lib,"opencv_imgproc248.lib")

using namespace cv;
using namespace std;

#define MAX_SIZE 1024

float imgdata[MAX_SIZE][MAX_SIZE];

int w = 0;
int h = 0;
float scalar = 50;

void renderScene(void)
{

glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();              
gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glRotatef(-90, 0.0, 1.0, 0.0);
glRotatef(-90, 0.0, 0.0, 1.0); 
glRotatef(-180, 0.0, 1.0, 0.0);

float imageCenterX = w*0.5;
float imageCenterY = h*0.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[])
{
string imgname="1.jpg";
IplImage* grey = cvLoadImage(imgname.c_str(), 1); //read image as a grey one  
if (grey == NULL)
{
cout << "No valid image input." << endl;
char c = getchar();
return 1;
}
w = grey->width;
h = grey->height;

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

//------------------OpenGL-------------------------  
glutInit(&argc, (char**)argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("3D disparity image");
glutDisplayFunc(renderScene);
glutReshapeFunc(reshape);
glutMainLoop();
cvWaitKey(0);
//release opencv stuff.  
cvReleaseImage(&grey);
cvDestroyWindow("Original");

return 0;
}

opencv与opengl混用实现三维点云图像相关推荐

  1. 我们成功给OpenCV添加了三维点云降采样算法!

    作者:阮业淳,钟万里,张昌圳(本科生) 指导教师:于仕琪 南方科技大学计算机科学与工程系 知名开源计算机视觉库OpenCV(Open Source Computer Vision Library)在其 ...

  2. OpenCV、OpenGL、OpenCL和DirectX 的区别、联系、前景

    致敬: https://blog.csdn.net/zhongguoren666/article/details/6697025 http://www.elecfans.com/emb/603169_ ...

  3. 模式识别研究生:三维点云从零开始学习

    模式识别研究生:三维点云从零开始学习 #模式识别 三维点云 这是我第一篇博客,想记录下自己的学习探索的过程,一点点将其记录下来,应该会有助于更加系统的学习知识. 本人本科学的专业是电气工程以及自动化, ...

  4. 三维点云处理06-2D/3DIoU计算

    三维点云处理06-2D/3DIoU计算 IoU定义:预测边框与真是边框的交集与并集之比 首先说明IoU的计算并不需要像下图所示对各种情况进行分类后,再进行计算 IoU的计算本质上是集合交集的计算,首先 ...

  5. 深度相机Kinect2.0三维点云拼接实验(二)

    文章目录 摘要 Linux系统下的环境搭建 Ubuntu系统安装 ROS-Melodic安装 Kinect2.0驱动安装 PCL库安装 Open-CV库安装 注意事项 Windows10系统下的环境搭 ...

  6. OpenCV/OpenCL/OpenGL区别

    OpenCV/OpenCL/OpenGL区别: OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言.跨平台的应用程序接口(API)的规格,它用于生成二维.三维图像. ...

  7. 三维点云语义分割模型介绍

    三维点云语义分割模型介绍 1 三维深度学习简介 1.1 三维数据表达方式 2 PointNet 2.1 点云的属性 2.1.1 无序性 2.1.2 关联性 2.1.3 不变性 2.2 key modu ...

  8. SfM多视图三维点云重建--【VS2015+OpenCV3.4+PCL1.8】

    难点 在完成两视图三维重建之后,接下来就是进行多视图重建.多视图重建的难点在于如何确定第 i i i( i i i>2)个相机到世界坐标系的位姿变换矩阵. 两视图重建时,是将第一个相机所在的坐标 ...

  9. CloudCompare:三维点云(网格)编辑和处理工具

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文来源:公众号@点云PCL,原文:CloudCompare的介绍 CloudCompare是一个三维 ...

最新文章

  1. 最新的ES 5.0路由算法底层实现
  2. 当C++爬山壁纸——C++山寨版
  3. 重新ICP,在没有Matlab的日子里
  4. 修改 MrBayes 3.2 源码解决不能恢复断点的问题
  5. ODT .NET 详解之 SqlDataSource 访问 Oracle
  6. 纪念一下我这尴尬中二的排名吧
  7. Pytorch 分布式训练
  8. QTableView 常用功能总结
  9. 51单片机——LED点阵屏
  10. CS客户端单元测试(1) 开始
  11. 行为型设计模式(二)
  12. 【TCP/IP】IP:网际协议(寻址和路由)
  13. 艾美捷人重组MEGACD40L蛋白(可溶性)实例展示
  14. U盘有占用空间,但无文件或者都变成了快捷方式
  15. 静态分析—扇入、扇出、圈复杂度
  16. 根据字体的中文名 获取 字体的路径 和 英文名
  17. 分析DB2数据库的优势
  18. python图片转黑白_python实现彩照转黑白以及图片转素描画
  19. CCNP学习笔记15
  20. 微信公众号开发及运营(一)

热门文章

  1. Java开发怎么达到年薪 50w ?我有一些想法和建议
  2. 超详细百家大厂面试资料,免费送!
  3. 目前,只有IDEA这款神器能把Java8的数据流问题这么完美的解决掉!
  4. Java文件流应用:复制文件
  5. python3爬虫入门(urllib和requests简单使用)
  6. wepy公共样式_wepy框架开发小程序文档
  7. 手撕设计模式之「单例模式」(详细解析)
  8. 收藏丨运维良药,K8S日常故障处理集锦
  9. 网工协议基础(4)TCP/UDP协议
  10. 2021年全新各方向IT职业技能图谱