opencv与opengl混用实现三维点云图像
/*
灰度图转换为高度图,为双目视觉三维重建做准备。
*/
#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混用实现三维点云图像相关推荐
- 我们成功给OpenCV添加了三维点云降采样算法!
作者:阮业淳,钟万里,张昌圳(本科生) 指导教师:于仕琪 南方科技大学计算机科学与工程系 知名开源计算机视觉库OpenCV(Open Source Computer Vision Library)在其 ...
- OpenCV、OpenGL、OpenCL和DirectX 的区别、联系、前景
致敬: https://blog.csdn.net/zhongguoren666/article/details/6697025 http://www.elecfans.com/emb/603169_ ...
- 模式识别研究生:三维点云从零开始学习
模式识别研究生:三维点云从零开始学习 #模式识别 三维点云 这是我第一篇博客,想记录下自己的学习探索的过程,一点点将其记录下来,应该会有助于更加系统的学习知识. 本人本科学的专业是电气工程以及自动化, ...
- 三维点云处理06-2D/3DIoU计算
三维点云处理06-2D/3DIoU计算 IoU定义:预测边框与真是边框的交集与并集之比 首先说明IoU的计算并不需要像下图所示对各种情况进行分类后,再进行计算 IoU的计算本质上是集合交集的计算,首先 ...
- 深度相机Kinect2.0三维点云拼接实验(二)
文章目录 摘要 Linux系统下的环境搭建 Ubuntu系统安装 ROS-Melodic安装 Kinect2.0驱动安装 PCL库安装 Open-CV库安装 注意事项 Windows10系统下的环境搭 ...
- OpenCV/OpenCL/OpenGL区别
OpenCV/OpenCL/OpenGL区别: OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言.跨平台的应用程序接口(API)的规格,它用于生成二维.三维图像. ...
- 三维点云语义分割模型介绍
三维点云语义分割模型介绍 1 三维深度学习简介 1.1 三维数据表达方式 2 PointNet 2.1 点云的属性 2.1.1 无序性 2.1.2 关联性 2.1.3 不变性 2.2 key modu ...
- SfM多视图三维点云重建--【VS2015+OpenCV3.4+PCL1.8】
难点 在完成两视图三维重建之后,接下来就是进行多视图重建.多视图重建的难点在于如何确定第 i i i( i i i>2)个相机到世界坐标系的位姿变换矩阵. 两视图重建时,是将第一个相机所在的坐标 ...
- CloudCompare:三维点云(网格)编辑和处理工具
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文来源:公众号@点云PCL,原文:CloudCompare的介绍 CloudCompare是一个三维 ...
最新文章
- 最新的ES 5.0路由算法底层实现
- 当C++爬山壁纸——C++山寨版
- 重新ICP,在没有Matlab的日子里
- 修改 MrBayes 3.2 源码解决不能恢复断点的问题
- ODT .NET 详解之 SqlDataSource 访问 Oracle
- 纪念一下我这尴尬中二的排名吧
- Pytorch 分布式训练
- QTableView 常用功能总结
- 51单片机——LED点阵屏
- CS客户端单元测试(1) 开始
- 行为型设计模式(二)
- 【TCP/IP】IP:网际协议(寻址和路由)
- 艾美捷人重组MEGACD40L蛋白(可溶性)实例展示
- U盘有占用空间,但无文件或者都变成了快捷方式
- 静态分析—扇入、扇出、圈复杂度
- 根据字体的中文名 获取 字体的路径 和 英文名
- 分析DB2数据库的优势
- python图片转黑白_python实现彩照转黑白以及图片转素描画
- CCNP学习笔记15
- 微信公众号开发及运营(一)