首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python openCV中显示16位4096强度图像?

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

Stack Overflow用户
提问于 2018-05-30 03:34:17
回答 1查看 13.2K关注 0票数 5

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

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

代码语言:javascript
复制
import cv2

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

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

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

代码语言:javascript
复制
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图像。

cv2.imshowdocumentation并没有真正的帮助。在Python openCV中有没有显示16位4096强度图像的方法?

可以在here中找到测试镜像test.tif

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-30 07:34:26

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

您可以设置图像的最小/最大值,它将相应地缩放图像(通过将图像的最小值移动到alpha,将图像的最大值移动到beta)。假设您的img已经是一个uint16

代码语言:javascript
复制
img_scaled = cv2.normalize(img, dst=None, alpha=0, beta=65535, norm_type=cv2.NORM_MINMAX)

然后你就可以像平常一样看了。

默认情况下,cv2.normalize()将生成与您的输入图像类型相同的图像,因此,如果您想要一个无符号的16位结果,您的输入应该是uint16

同样,请注意,这线性地扩展了您的图像范围-如果您的图像实际上从未达到0,并且假设最低值为100,那么在归一化之后,最低值将是您设置为alpha的任何值。如果你不想这样,正如其中一条评论所建议的那样,你可以简单地将你的图像乘以16,因为它目前只有4095。使用* 16,它将上升到65535。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50591694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档