我正在尝试从TIFF图像中获取像素的RGB值。因此,我所做的是:
import tifffile as tiff
a = tiff.imread("a.tif")
print (a.shape) #returns (1295, 1364, 4)
print(a) #returns [[[205 269 172 264]...[230 357 304 515]][[206 270 174 270] ... [140 208 183 286]]]
但是由于我们知道RGB的像素颜色范围是(0,255)。所以,我不明白这些数组返回什么,因为有些值大于255,为什么会有4个值呢?
通过数组大小为1295 * 1364,即图像大小。
答案 0 :(得分:1)
TIFF(或任何其他图像)为4频段的正常原因是:
请注意,有些人将TIFF文件用于地形信息,测深信息,显微镜检查和其他用途。
值大于256的可能原因是它是16位数据。虽然可以是10位,12位,32位,浮点数,双精度数或其他形式。
如果无法访问您的图像,则无法说更多。有权访问您的图片,您可以在命令行中使用 ImageMagick 来查找更多信息:
magick identify -verbose YourImage.TIF
示例输出
Image: YourImage.TIF
Format: TIFF (Tagged Image File Format)
Mime type: image/tiff
Class: DirectClass
Geometry: 1024x768+0+0
Units: PixelsPerInch
Colorspace: CMYK <--- check this field
Type: ColorSeparation <--- ... and this one
Endianess: LSB
Depth: 16-bit
Channel depth:
Cyan: 16-bit <--- ... and this
Magenta: 1-bit <--- ... this
Yellow: 16-bit <--- ... and this
Black: 16-bit
Channel statistics:
...
...
您可以像这样缩放值:
from tifffile import imread
import numpy as np
# Open image
img = imread('image.tif')
# Convert to numpy array
npimg = np.array(img,dtype=np.float)
npimg[:,:,0]/=256
npimg[:,:,1]/=256
npimg[:,:,2]/=256
npimg[:,:,3]/=65535
print(np.mean(npimg[:,:,0]))
print(np.mean(npimg[:,:,1]))
print(np.mean(npimg[:,:,2]))
print(np.mean(npimg[:,:,3]))