渲染彩色图(渲染深度图)

渲染彩色图(渲染深度图)

彩色图

根据像素的某一属性将像素值由黑白变换到彩色空间,以深度图举例

直方图拉伸

为体现深度差异,对深度图进行直方图拉伸

彩色空间变换

根据直方图0~255的拉伸,变换到彩色图像

实例

	double min;
	double max;
	int maxIDX;
	int minIDX;
	//cv::minMaxIdx(depthMapACV, &min, &max,&minIDX,&maxIDX, mask);
	cv::minMaxIdx(depthMapACV, &min, &max,&minIDX,&maxIDX);
	cv::Mat adjMap;
	// Histogram Equalization
	float scale = 255 / (max - min);
	depthMapACV.convertTo(adjMap, CV_8UC1, scale, -min*scale);

	// this is great. It converts your grayscale image into a tone-mapped one, 
	// much more pleasing for the eye
	// function is found in contrib module, so include contrib.hpp 
	// and link accordingly
	cv::Mat falseColorsMap;
	applyColorMap(adjMap, falseColorsMap, cv::COLORMAP_JET);

	cv::imshow("Out", falseColorsMap);
	cv::waitKey(0);

结果

在这里插入图片描述
在这里插入图片描述
参考:https://stackoverflow.com/questions/13840013/opencv-how-to-visualize-a-depth-image

更一般的形式

除了图像之外,我们可能想渲染其它的结构,例如Mesh网格,这时我们依然可以借助opencv的applyColorMap接口来实现。
这里用vcg Mesh结构举例实现渲染网格梯度场

	std::vector<float> norms(vertices.size());
	std::vector<uchar> normsC(vertices.size());
	int i(0);
	foreach(v, vertices) {
		norms[i++] = norm(grad[v]);
	}
	cv::normalize(norms, norms, 1.0, 0.0, cv::NORM_MINMAX);

	i = 0;
	for (auto& n : norms)
	{
		normsC[i++] = n * 255;
	}
	cv::equalizeHist(normsC, normsC);

	cv::Mat falseColorsMap;
	cv::applyColorMap(normsC, falseColorsMap, cv::COLORMAP_JET);


	i = 0;
	for (auto& v : m.vert)
	{
		//float val = normsC[i++];
		uchar valB = falseColorsMap.at<cv::Vec3b>(i).val[0];
		uchar valG = falseColorsMap.at<cv::Vec3b>(i).val[1];
		uchar valR = falseColorsMap.at<cv::Vec3b>(i).val[2];
		v.C() = vcg::Color4b(valR, valG, valB, 1);
		i++;
	}
	vcg::tri::io::ExporterOFF<MyMesh>::Save(m, path.c_str(), vcg::tri::io::Mask::IOM_VERTCOLOR);

结果

在这里插入图片描述

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值