繁体   English   中英

在16Bit一通道中写入OpenCV Mat

[英]Write OpenCV Mat in 16Bit one channel

我坚持用16 Bit编写OpenCV Mat。 无论我尝试什么,结果始终是8 Bit (0-255)图像。 我检查了有关SO的相关问题,但nothig在这里解决了这个问题。

在将其写入磁盘之前,该垫包含0-65535灰度值。 我已经尝试了以下方法(以及更多方法):

cv::Mat depth;
depth.convertTo(depth, CV_16UC1);
imwrite("depth.png", depth);

就像在imwrite()的文档中说的那样,当它在CV_16U时,可以使用imwrite()保存Mat。

代码有什么问题? 有人知道如何解决这个问题吗?

以下两项工作:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;

int main( int, char** argv )
{
  // Start with unsigned shorts and write to PNG
  unsigned short data[4] = {0,12000,24000,65535};
  Mat src =  Mat(1,4,CV_16UC1,data);
  imwrite("depth.png",src);

  // Start with floats and convert to 16-bit then write to PNG
  float dataf[4]={0.0,12000.0,25000.0,65000.0};
  Mat a = Mat(1,4,CV_32FC1,dataf);
  a.convertTo(a,CV_16UC1);
  imwrite("d2.png",a);
}

我可以使用ImageMagick如下检查它们,它们都是16位灰度PNG:

convert depth.png txt:

# ImageMagick pixel enumeration: 4,1,65535,gray
0,0: (0)  #000000000000  gray(0)
1,0: (12000)  #2EE02EE02EE0  gray(18.3108%)
2,0: (24000)  #5DC05DC05DC0  gray(36.6217%)
3,0: (65535)  #FFFFFFFFFFFF  gray(255)

convert d2.png txt:

# ImageMagick pixel enumeration: 4,1,65535,gray
0,0: (0)  #000000000000  gray(0)
1,0: (12000)  #2EE02EE02EE0  gray(18.3108%)
2,0: (25000)  #61A861A861A8  gray(38.1476%)
3,0: (65000)  #FDE8FDE8FDE8  gray(99.1836%)

我建议您的问题出在其他地方。 请提供MCVE

另外,也许尝试将其写入FileStoragePGM格式而不是PNG格式,然后在常规编辑器中查看该文件,看它是否确实看起来像16位数据-以及它是否可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM