[英]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.