首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用skimage (Python)批量处理Tiff文件

用skimage (Python)批量处理Tiff文件
EN

Stack Overflow用户
提问于 2022-03-10 11:50:05
回答 2查看 505关注 0票数 2

我希望;在Python中打开、处理和保存多个触发器。

我有以下代码要打开、处理和保存1(1) TIFF,但是多个文件有问题:

代码语言:javascript
复制
import skimage.io
import skimage.viewer
import skimage                 
import skimage.io    
         
# Read 1 image.TIF:
image = skimage.io.imread(fname=path)
image[2,1]= 1.0

# Process the file (make binary)
gray_image = skimage.color.rgb2gray(image)

# Blur the image to denoise (larger sigma = more noise removed)
blurred_image = skimage.filters.gaussian(gray_image, sigma=5)

# Adding threshold, t:
t = 0.8
binary_mask = blurred_image < t

# Save the file to another location:
skimage.io.imsave(fname=path, arr = binary_mask)

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2022-03-10 12:46:53

以下是一种可能有用的多处理方法:

代码语言:javascript
复制
import skimage
from concurrent.futures import ProcessPoolExecutor
from glob import glob
import os.path

source_dir = '<your source directory>'
target_dir = '<your target directory>'
filetype = '*.tif'

def process(path):
    image = skimage.io.imread(fname=path)
    image[2,1] = 1.0
    gray_image = skimage.color.rgb2gray(image)
    blurred_image = skimage.filters.gaussian(gray_image, sigma=5)
    outpath = os.path.join(target_dir, os.path.basename(path))
    arr = blurred_image < 0.8
    skimage.io.imsave(fname=outpath, arr=arr)

def main():
    with ProcessPoolExecutor() as executor:
        filelist = glob(os.path.join(source_dir, filetype))
        executor.map(process, filelist)

if __name__ == '__main__':
    main()

使用glob标识与*.tif模式匹配的所有文件,然后使用ProcessPoolExecutor的映射函数在自己的进程中处理每个文件。由于处理主要是CPU密集型的,因此多处理可能是最适合这种情况的。

票数 -1
EN

Stack Overflow用户

发布于 2022-03-18 21:18:10

有必要并行化吗?您正在执行的处理过程并不是很大。如果不需要并行处理,只需在图像上运行for循环即可。

代码语言:javascript
复制
import skimage.io
import skimage.viewer
import skimage                 
import skimage.io
import os
import glob

# set up an in and out directory
in_dir = 'directory\with\images'
out_ir = 'directory\for\procecessed\images'

# make a list of all of the raw image files
os.chdir(in_dir)
filelist = glob.glob('*.png') # change to whatever file pattern you need here


for file_iter in filelist:
        
    os.chdir(in_dir)
    image = skimage.io.imread(fname=file_iter)
    image[2,1]= 1.0

    # Process the file (make binary)
    gray_image = skimage.color.rgb2gray(image)

    # Blur the image to denoise (larger sigma = more noise removed)
    blurred_image = skimage.filters.gaussian(gray_image, sigma=5)

    # Adding threshold, t:
    t = 0.8
    binary_mask = blurred_image < t

    # Save the file to another location:
    out_filename = file_iter[:-4] + 'processed.png' # make new filename based on old filename
    os.chdir(out_dir)
    skimage.io.imsave(fname=out_filename, arr = binary_mask)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71423661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档