显示效果如下

核心代码
点云归一化
根据点云强度,通过opencv的applyColorMap函数将其转化为伪彩色图,即可达到从灰度图转成彩色图的目的
void WOpenglWidget::normalizetoGl(GLfloat *glp, IPointCloud::Ptr cloud)
{
float min_x = -std::numeric_limits<float>::max();
float max_x = std::numeric_limits<float>::max();
float min_y = -std::numeric_limits<float>::max();
float max_y = std::numeric_limits<float>::max();
float min_z = -std::numeric_limits<float>::max();
float max_z = +std::numeric_limits<float>::max();
cv::Mat img = cv::Mat::zeros(1, cloud->points.size(), CV_8UC1);
for(unsigned int i = 0; i < cloud->points.size(); i++){
float x = cloud->points.at(i).x;
float y = cloud->points.at(i).y;
float z = cloud->points.at(i).z;
if(x > max_x){
max_x = x;
}
if(x < min_x){
min_x = x;
}
if(y > max_y){
max_y = y;
}
if(y < min_y){
min_y = y;
}
if(z > max_z){
max_z = z;
}
if(z < min_z){
min_z = z;
}
uchar *p;
p = img.ptr<uchar>(0);
p[i] = cloud->points.at(i).intensity;
//qDebug() << p[i];
}
float maxx = max(max_x, max(max_y, max_z));
float minn = min(min_x, min(min_y, min_z));
float scalee = max(maxx, fabs(minn));
// cv::normalize()
cv::Mat img2 ;
applyColorMap(img, img2, cv::COLORMAP_HSV);
for(unsigned int i = 0; i < cloud->points.size(); i++){
// qDebug() << img2.at<cv::Vec3b>(0,i)[2];
//qDebug() << img3.at<cv::Vec3b>(0, i)[2]/255.0;
*(glp + i*6+3) = img2.at<cv::Vec3b>(0, i)[2]/255.0;
*(glp + i*6+4) = img2.at<cv::Vec3b>(0, i)[1]/255.0;
*(glp + i*6+5) = img2.at<cv::Vec3b>(0, i)[0]/255.0;
cloud->points.at(i).x = cloud->points.at(i).x / scalee;
cloud->points.at(i).y = cloud->points.at(i).y / scalee;
cloud->points.at(i).z = cloud->points.at(i).z / scalee;
*(glp + i*6) = cloud->points.at(i).x;
*(glp + i*6+1) = cloud->points.at(i).y;
*(glp + i*6+2) = cloud->points.at(i).z;
}
}
顶点着色器
#version 130
in vec3 posVertex;
in vec3 colorPos;
out vec3 pointColor;
attribute vec2 a_texcoord;
uniform mat4 trans;
varying vec2 v_texcoord;
void main()
{
gl_Position = trans * vec4(posVertex, 1.0f);
pointColor = colorPos;
v_texcoord = a_texcoord;
}
片段着色器
#version 130
out vec4 fragColor;
in vec3 pointColor;
uniform vec4 gColor;
uniform sampler2D texture;
varying vec2 v_texcoord;
void main()
{
fragColor = vec4(pointColor, 1.0);
}
版权声明:本文为qq_37770942原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。