plt.imshow(myImage)
plt.show()
将RGB数据裁剪到imshow的有效范围内(对于浮点数为[0..1],对于整数为[0..255])。
这些值被裁剪为255,并显示一个完全白色的图像。关于imread读取的图像数据,错误是正确的。这些值看起来像:
myImage[0]
array([[60061, 60135, 60673],
[59907, 59983, 60533],
[59931, 60007, 60557],
...,
[60649, 60801, 61147],
[60581, 60743, 61091],
[60647, 60797, 61143]], dtype=uint16)
这些值需要进行缩放才能获得范围在0-255之间的正确RGB值。
当我使用类似IrfanView的软件打开图像文件并重新保存时,色彩空间会被正确处理为RGB(可能是因为IrfanView正在为我转换它)。然而,我需要自动化这个转换过程。
是否可以使用scikit-image或PIL(或其他方法)将ProPhoto RGB色彩空间的TIF文件转换为RGB色彩空间?我在scikit-image的“color”模块文档中https://scikit-image.org/docs/stable/api/skimage.color.html没有看到对该色彩空间的任何提及。除非“ProPhoto RGB”可以用另一个名称表示或与另一种转换方法兼容?
谢谢!
编辑:
用户Abhi25t的答案有助于进展一些来显示这些图像。然而,他们的答案似乎仅解决了16位到8位的转换问题。还存在ProPhoto RGB到sRGB的色彩空间问题。希望这次编辑可以更好地说明这个问题。
原始测试TIF图像的像素值为ProPhoto色彩空间:
array([[58465, 58479, 58785],
[58575, 58591, 58879],
[58441, 58457, 58739],
...,
[58185, 58045, 58549],
[58101, 57951, 58463],
[57993, 57853, 58371]], dtype=uint16)
Photoshop转换为sRGB的文件的像素值:
array([[59771, 59873, 60161],
[59863, 59965, 60235],
[59755, 59855, 60119],
...,
[59623, 59489, 59993],
[59561, 59411, 59925],
[59463, 59333, 59851]], dtype=uint16)
IRFAN VIEW 转换文件的像素值(似乎已转换为 8 位并翻译为 sRGB 空间):
array([[233, 233, 234],
[233, 233, 234],
[232, 233, 234],
...,
[232, 231, 233],
[232, 231, 233],
[231, 231, 233]], dtype=uint8)
我在这里添加了一些测试代码和图片: https://drive.google.com/drive/folders/1tcfUY2Kwlz-LAlt6_YXtT8l6vLnCucbM?usp=sharing
该图像应显示为一个色彩检查器目标。 只需绘制“TEST_PROPHOTO_IRFAN_SAVED.tif”的imread结果,您就应该能够正确地看到它。
from skimage import io
import numpy as np
import matplotlib.pyplot as plt
# TEST_PROPHOTO.tif : RAW TIF FILE
# TEST_PROPHOTO_IRFAN_SAVED.tif : RAW TIF, OPENED IN IRFANVIEW AND RESAVED AS TIF
# TEST_SRGB_PHOTOSHOP_CONVERTED.tif : RAW TIF, OPENED IN PHOTOSHOP, PROFILE CONVERTED TO sRGB, RESAVED AS TIF
img_path = '/path/to/image/myImage.tif'
img_rgb = io.imread(img_path)
plt.imshow(img_rgb)
plt.show()
# VIEW IMAGE CONTENTS
img_rgb[0] # you can see these values are 16-bit;
# however, colorspace (actual RGB values) differs between the ProPhoto test file and the Photoshop converted sRGB file
# STACKOVERFLOW USER Abhi25t's METHOD TO CONVERT FROM 16-bit color [0-65535] to 8-bit color [0-255]:
img_rgb_convert = img_rgb * (255/65535)
img_rgb_convert = img_rgb_convert.astype(int)
plt.imshow(img_rgb_convert)
plt.show()