我正在尝试加载从blender生成的深度贴图。
OpenCV加载图像并显示图像中的一个测试值。
cv::Mat depthMap = cv::imread(path, CV_LOAD_IMAGE_ANYDEPTH);
std::cout << "TestValue: " << depthMap.at<short>(0,0) << std::endl;
c ++的输出是以下值:
TestValue: 31110
Photoshop显示灰度值121
加载深度图时,我需要从0到255或0 - 1的值,以便测试值显示121或0.4745。如果我对深度图进行标准化,我会得到0到1的值,但深度图中的最高值是121而不是255.
任何想法我做错了什么?
答案 0 :(得分:2)
您正在将数据读取为短(已签名的短整数,&#34;至少16位&#34;)。请改用unsigned short
:
std::cout << "TestValue: " << depthMap.at<unsigned short>(0,0) << std::endl;
您也可以尝试ushort
。
另一方面,如果您想要0到255之间的值,请不要使用CV_LOAD_IMAGE_ANYDEPTH标志。将图像读取为1通道或将其转换为灰度。
EDITED:正如评论中所指出的,在使用CV_LOAD_IMAGE_ANYDEPTH标志进行读取时,访问应使用正确的类型:unsigned short
(int)。如果您阅读/转换为灰度图像,则可以使用unsigned char
访问权限。