gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:53 24 4
gpt4 key购买 nike

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

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

import cv2

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

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

enter image description here

我可以在 matplotlib 中使用 vminvmax 来配置颜色映射:

import cv2
import matplotlib.pyplot as plt

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

显示图像的内容:

enter image description here

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

documentation cv2.imshow 并不是很有帮助。有没有办法在 Python openCV 中显示 16 位 4096 强度图像?

可以找到测试图像test.tif here .

最佳答案

您需要使用 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


再次注意,这会线性拉伸(stretch)您的图像范围——如果您的图像实际上从未达到 0 并且说最低值为 100,那么在您归一化之后,最低值将是您设置的 alpha 到。如果您不想这样做,正如其中一条评论所建议的那样,您可以简单地将图像乘以 16,因为它目前最多只能增加 4095。使用 * 16,它将增加到 65535。

关于python - 如何在 Python openCV 中显示 16 位 4096 强度图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50591694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com