У меня есть float x, float y, float z значения изображения. Я хочу построить 16-битное изображение глубины png, скопировав значения z. Изображение, которое я получаю в результате, имеет некоторые недопустимые точки. Ниже мой код.Создание мата из данных необработанного буфера
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. – DimChtz
некоторые области изображения темные. Я не был уверен, можно ли скопировать данные float в 'uint16_t *'. Это то, как мы можем создать изображение глубины? – MThomas
Каков диапазон значений 'z'? Возможно, все, что вам нужно, это 'depthValues [i] = static_cast (sampleVector.at (i) .z);' BTW, x, y, z относится к R, G, B? –
DimChtz