Ich habe float x, float y, Float z Werte eines Bildes. Ich möchte ein 16-Bit-Png-Tiefenbild konstruieren, indem ich die Z-Werte kopiere. Das Bild, das ich dadurch erhalte, hat einige ungültige Punkte. Unten ist mein Code.Mat Image Erstellung von Rohpufferdaten
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);
Kann mir jemand sagen, ob ich die float-Werte in ein unsigned char-Array kopieren kann, um das Bild zu erstellen? Ist mein Bild deshalb ungültig?
Was "Ergebnis hat einige ungültige Punkte" genau bedeutet? Ist der Bereich der z-Werte "[0 - 1]"? Wenn z Werte> 1 hat, ist alles über 1 65535. – DimChtz
einige Bereiche des Bildes sind dunkel. Ich war mir nicht sicher, ob die Float-Daten nach 'uint16_t * 'kopiert werden können. Können wir so ein Tiefenbild schaffen? – MThomas
Was ist der Bereich von 'z' Werten? Vielleicht brauchst du nur 'depthValues [i] = static_cast (sampleVector.at (i) .z);' BTW, x, y, z bezieht sich auf R, G, B? –
DimChtz