Jay*_*ong 3 python opencv image-processing computer-vision
我有以灰度16位tiff格式编码的图像。他们使用16位色深的变体,其中最大强度为4,096。
我相信openCV中的默认最大强度是65536,因此我的图像使用以下代码显示为黑色。
import cv2
image = cv2.imread("test.tif", -1)
cv2.imshow('tiff', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(image)
Run Code Online (Sandbox Code Playgroud)
我可以使用vmin,并vmax在matplotlib配置颜色映射:
import cv2
import matplotlib.pyplot as plt
image = cv2.imread("test.tif", -1)
plt.imshow(image, cmap="gray", vmin=0, vmax=4096)
plt.show()
Run Code Online (Sandbox Code Playgroud)
它显示图像的内容:
我要坚持使用openCV的原因是matplotlib不支持显示16位RGB图像。
该文件的cv2.imshow是不是真的有帮助。有没有办法在Python openCV中显示16位4096强度图像?
测试图像test.tif可以在这里找到。
您需要cv2.normalize()在显示之前使用缩放图像。
您可以设置图像的最小值/最大值,它将适当缩放图像(通过将图像的最小值移动到,将图像的alpha最大值移动到beta)。假设您img已经是uint16:
img_scaled = cv2.normalize(img, dst=None, alpha=0, beta=65535, norm_type=cv2.NORM_MINMAX)
Run Code Online (Sandbox Code Playgroud)
然后您可以正常查看。
默认情况下,cv2.normalize()将产生与输入图像相同类型的图像,因此,如果要使用无符号16位结果,则输入应为uint16。
再次注意,这会线性扩展图像的范围-如果图像从未真正达到0并说最小值为100,则在进行标准化后,该最小值将是您设置的值alpha。如果您不希望这样做,就像其中一条评论所建议的那样,您可以将图像乘以16,因为它目前最多只能增加4095。使用* 16,则可以最多增加65535。
| 归档时间: |
|
| 查看次数: |
3271 次 |
| 最近记录: |