C++ 在16位单通道中写入OpenCV Mat
我一直在用C++ 在16位单通道中写入OpenCV Mat,c++,opencv,C++,Opencv,我一直在用16位编写OpenCV Mat。无论我尝试什么,结果总是8位(0-255)图像。我检查了相关的问题,但这里没有解决这个问题 Mat在写入磁盘之前包含0-65535greyscale值。我已经尝试了以下方法(以及更多方法): 正如他们在文档中所说的,在CV_16U 代码有什么问题?有人知道如何解决这个问题吗?以下两项工作: #include <iostream> #include <opencv2/opencv.hpp> using namespace cv;
16位编写OpenCV Mat。无论我尝试什么,结果总是8位(0-255)
图像。我检查了相关的问题,但这里没有解决这个问题
Mat在写入磁盘之前包含0-65535
greyscale值。我已经尝试了以下方法(以及更多方法):
正如他们在文档中所说的,在CV_16U
代码有什么问题?有人知道如何解决这个问题吗?以下两项工作:
#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);
}
及
我认为你的问题在别处。请提供一份报告
此外,也可以尝试将其写入文件存储
或PGM
格式,而不是PNG
,然后在普通编辑器中查看该文件,看看它是否真的看起来像16位数据,以及它是否工作正常。谢谢,第一个建议的方法奏效了。我会调查我的代码出了什么问题,然后发布编辑。问题不在于保存图像。我认为问题是当你使用imread加载图像时。如果使用不带任何标志的imread,则默认选项假定图像为彩色图像,并尝试将其作为8位uchar加载,请尝试:cv::imread(“DepthInput.png”,cv_load_image_UNCHANGED)代码>以加载深度图像·
#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);
}
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%)