[英]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 。
另外,也許嘗試將其寫入FileStorage
或PGM
格式而不是PNG
格式,然后在常規編輯器中查看該文件,看它是否確實看起來像16位數據-以及它是否可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.