簡體   English   中英

如何使用 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

function 調用將類似於

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)

然后,您可以通過索引訪問每一層(例如 image[0])。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM