如何在Python openCV中显示16位4096强度图像?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (940)

我有以灰度16位tiff格式编码的图像。他们使用最大强度为4,096的16位颜色深度的变体。

我相信openCV中默认的最大亮度是65,536,所以我的图像使用下面的代码显示为黑色。

import cv2

image = cv2.imread("test.tif", -1)

cv2.imshow('tiff', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(image)

可以使用vminvmaxmatplotlib配置颜色映射:

import cv2
import matplotlib.pyplot as plt 

image = cv2.imread("test.tif", -1)
plt.imshow(image, cmap="gray", vmin=0, vmax=4096)
plt.show()

它显示图像的内容:

我想坚持使用openCV的原因是matplotlib不支持显示16位RGB图像。

有没有办法在Python openCV中显示16位4096强度图像?

提问于
用户回答回答于

需要cv2.normalize()在显示之前使用缩放图像。

可以设置图像的最小/最大值,它会适当缩放图像(通过将图像的最小值移动到图像的alpha最大值并将其最大值移动到beta)。假设img已经是uint16

img_scaled = cv2.normalize(img, dst=None, alpha=0, beta=65535, norm_type=cv2.NORM_MINMAX)

默认情况下,cv2.normalize()会导致图像与输入图像的类型相同,所以如果你想要一个无符号的16位结果,你的输入应该是uint16

扫码关注云+社区

领取腾讯云代金券