簡體   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