我已经被困一个星期试图解码Unity中的16位1通道png。图像是字节数组的形式,需要对其进行解码以访问各个像素值。图像是深度图像,其中每个像素包含深度测量值。
我无法使用Unity的Texture2d.loadImage(),因为它会因某种原因自动将格式更改为RGBA24。我也查看了opencv插件,但它不是免费的,因此不是一个选项。我既不能使用.NET框架中的System.Windows.Media.Imaging.PngBitmapDecoder,因为我的平台是Ubuntu 。
我没有.NET ide,我通过Unity使用MonoDevelop。
希望你们能帮忙! :)
答案 0 :(得分:1)
您可以使用ImageMagick或GraphicsMagick将图像从PNG转换为PGM并从那里开始。 PGM很容易使用,只包含一个带有“P2 width height maxval”的简单标题,后面是左上角到右下角的像素:
# Make a 4x4 test image with 16-bit grayscale pixels
im7q16magick gradient:[4x4] -depth 16 g16.png
# Convert it to PGM format
im7q16magick g16.png -compress none g16.pgm
# Print it out
cat g16.pgm
P2
4 4
65535
65535 65535 65535 65535
49151 49151 49151 49151
32768 32768 32768 32768
16384 16384 16384 16384
答案 1 :(得分:1)
问题是png图像有12个字节的垃圾,我必须在它们被删除之前删除。完成此后,Texture2d.loadImage()工作。有问题的图像是通过Unity中的ROSBridgeLib从ROS作为CompressedImage消息传来的。谢谢你的帮助:)