1

我尝试读取.hdr这样的文件:

img = cv2.imread(sys.argv[1])
cv2.imshow('Image', img)

这给了我一个 3 通道的 8 位Mat图像,它要么是(几乎)全白,要么是非常暗的图像。所以我想它只给了我一张曝光序列的图像?我如何获得Mat所有信息的正确性?

4

1 回答 1

1

您拥有的数据是合并的堆栈而不是单独的曝光。要正确显示它,您需要对数据进行色调映射。这是正确的程序,例如:

Mat hdr = imread("xxx.hdr",-1); // correct element size should be CV_32FC3
Mat ldr;
Ptr<TonemapReinhard> tonemap = createTonemapReinhard(2.2f);
tonemap->process(hdr, ldr);
ldr.convertTo(ldr, CV_8UC3, 255);

然后用 highgui 显示你的 ldr。

于 2016-09-13T14:28:32.837 回答