如何使用opencv从tif文件导入多个图层
how to import multiple layers from tif file with opencv
我正在使用 python (cv2) 导入具有三层的 .tif 文件,但我似乎只能导入一层。如何分别导入所有三层?
import cv2
img = cv2.imread('LanB2_KD1P2_31603_gut_2.tif', cv2.IMREAD_COLOR)
#extract blue channel
blue_channel = img[:,:,0]
#write blue channel to greyscale image
cv2.imwrite('blue_channel.jpg',blue_channel)
这会从第一层提取蓝色通道,但不知道如何获取其他层
您可以简单地使用 cv2.split
分割图像通道。
import cv2
img = cv2.imread('LanB2_KD1P2_31603_gut_2.tif', cv2.IMREAD_COLOR)
b,g,r=cv2.split(img)
### saving files
cv2.imwrite('blue_channel.jpg', b)
cv2.imwrite('green_channel.jpg',g)
cv2.imwrite('red_channel.jpg',r)
编辑 1:
如果你想在一个 TIF 文件中拆分多个图像并将它们另存为单独的文件,如 @fmw42 所建议的,这里是代码。
import os
from PIL import Image
def tifToImage(tifPath,imageFormat,folderPath):
""" Function to convert tif to image
Args:
tifPath (str): path of input tif
imageFormat (str): format to save image
folderPath (str): Folder to save images
Returns:
int: 0 if successful
"""
print('tiftoimage: {}'.format(tifPath))
sep='/' if '/' in tifPath else '\'
fileName=tifPath.split(sep)[-1][:-4]
### Loading tiff image
tiffstack= Image.open(tifPath)
tiffstack.load()
### Saving each image to output folder
for i in range(tiffstack.n_frames):
tiffstack.seek(i)
pageName= fileName + '_{:05d}.{}'.format(i+1,imageFormat)
imagePath = os.path.join(folderPath,pageName)
tiffstack.save(imagePath)
return 0
函数调用类似于
tifToImage('LanB2_KD1P2_31603_gut_2.tif','jpg','out_folder')
更简单,你可以使用cv2.imreadmulti:
ret, image = cv2.imreadmulti('LanB2_KD1P2_31603_gut_2.tif', [], cv2.IMREAD_ANYCOLOR)
然后您可以通过索引访问每一层(例如图像[0])。
我正在使用 python (cv2) 导入具有三层的 .tif 文件,但我似乎只能导入一层。如何分别导入所有三层?
import cv2
img = cv2.imread('LanB2_KD1P2_31603_gut_2.tif', cv2.IMREAD_COLOR)
#extract blue channel
blue_channel = img[:,:,0]
#write blue channel to greyscale image
cv2.imwrite('blue_channel.jpg',blue_channel)
这会从第一层提取蓝色通道,但不知道如何获取其他层
您可以简单地使用 cv2.split
分割图像通道。
import cv2
img = cv2.imread('LanB2_KD1P2_31603_gut_2.tif', cv2.IMREAD_COLOR)
b,g,r=cv2.split(img)
### saving files
cv2.imwrite('blue_channel.jpg', b)
cv2.imwrite('green_channel.jpg',g)
cv2.imwrite('red_channel.jpg',r)
编辑 1: 如果你想在一个 TIF 文件中拆分多个图像并将它们另存为单独的文件,如 @fmw42 所建议的,这里是代码。
import os
from PIL import Image
def tifToImage(tifPath,imageFormat,folderPath):
""" Function to convert tif to image
Args:
tifPath (str): path of input tif
imageFormat (str): format to save image
folderPath (str): Folder to save images
Returns:
int: 0 if successful
"""
print('tiftoimage: {}'.format(tifPath))
sep='/' if '/' in tifPath else '\'
fileName=tifPath.split(sep)[-1][:-4]
### Loading tiff image
tiffstack= Image.open(tifPath)
tiffstack.load()
### Saving each image to output folder
for i in range(tiffstack.n_frames):
tiffstack.seek(i)
pageName= fileName + '_{:05d}.{}'.format(i+1,imageFormat)
imagePath = os.path.join(folderPath,pageName)
tiffstack.save(imagePath)
return 0
函数调用类似于
tifToImage('LanB2_KD1P2_31603_gut_2.tif','jpg','out_folder')
更简单,你可以使用cv2.imreadmulti:
ret, image = cv2.imreadmulti('LanB2_KD1P2_31603_gut_2.tif', [], cv2.IMREAD_ANYCOLOR)
然后您可以通过索引访问每一层(例如图像[0])。