【发布时间】:2016-08-09 15:22:38
【问题描述】:
我有一个图像的 float x、float y、float z 值。我想通过复制 z 值来构造一个 16 位 png 深度图像。结果我得到的图像有一些无效点。下面是我的代码。
uint16_t* depthValues = new uint16_t[size];
auto sampleVector(DepthPoints);
for (unsigned int i = 0; i < sampleVector.size(); i++)
{
depthValues[i] = (sampleVector.at(i).z) * 65536;
}
Mat newDepthImage = cv::Mat(var.height, var.width, CV_16UC1,depthValues);
imwrite(Location, CImage);
谁能告诉我,如果我可以将浮点值复制到一个无符号字符数组中来创建图像? 这就是我的图像有无效点的原因吗?
【问题讨论】:
-
“结果有一些无效点”究竟是什么意思? z 值的范围是
[0 - 1]吗?如果 z 的值为>1,则大于 1 的所有值都是 65535。 -
图像的某些区域很暗。我不太确定浮点数据是否可以复制到
uint16_t*。这就是我们创建深度图像的方法吗? -
z值的范围是多少?也许您只需要depthValues[i] = static_cast<uint16_t>(sampleVector.at(i).z);BTW,x,y,z 指的是 R,G,B? -
x,y,z 指的是 (x,y,z) 坐标。数据来自点云。
-
感谢所有帮助。有效。 :) :)