Как обработать несколько изображений в одном скрипте? - PullRequest
0 голосов
/ 02 июля 2019

Код ниже обрабатывает только одно изображение.У меня есть 3 изображения (с именем 1.tif, 2.tif, 3.tif) в одном месте.

Мне нужно выполнить одну и ту же обработку последовательно для всех 3 изображений в одном и том же сценарии и избежать дублирования кода.

Я думаю, что это можно сделать с помощью .glob или os.walk, но яне иметь необходимых знаний в Python для этой операции.Большое вам спасибо.

    import cv2
    import numpy as np
    import gdal

    in_imgpath = r'E:\2_PROJETS_DISK_E\test4\1.tif'

    img = cv2.imread(in_imgpath ,0)

    dataset1 = gdal.Open(in_imgpath)
    projection = dataset1.GetProjection()
    geotransform = dataset1.GetGeoTransform()

    # Processing
    blur = cv2.GaussianBlur(img,(5,5),0)
    ret1,th1 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    kernal = np.ones((3,3), np.uint8)
    dilation = cv2.dilate(th1, kernal, iterations=2)
    erosion = cv2.erode(dilation, kernal, iterations=1)
    opening = cv2.morphologyEx(erosion, cv2.MORPH_OPEN, kernal, iterations=3)
    closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernal, iterations=4)

    out_imgpath = r'E:\2_PROJETS_DISK_E\test4\1-1.tif'

    cv2.imwrite(out_imgpath ,closing)
    dataset2 = gdal.Open(out_imgpath, gdal.GA_Update)
    dataset2.SetGeoTransform( geotransform )
    dataset2.SetProjection( projection )

Ответы [ 2 ]

1 голос
/ 02 июля 2019

используйте шар. glob возвращает список путей всех файлов, которые соответствуют вашему шаблону.

import glob

for path in glob.glob('your path/*.tif'):
    do_something(path)
0 голосов
/ 02 июля 2019

glob действительно ваш друг, поскольку он позволит вам обрабатывать все соответствующие файлы в цикле.

Хитрость в том, чтобы отделить имя файла от пути, чтобы вы могли создать файл замены в нужном месте.

[import cv2
import numpy as np
import gdal

import os
from glob import glob

in_imgpath = r'E:\2_PROJETS_DISK_E\test4\*.tif'

for filename in glob(in_imgpath):
    img = cv2.imread(filename, 0)
    path, base_filename = os.path.split(filename)

    dataset1 = gdal.Open(in_imgpath)
    projection = dataset1.GetProjection()
    geotransform = dataset1.GetGeoTransform()

    # Processing
    blur = cv2.GaussianBlur(img,(5,5),0)
    ret1,th1 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    kernal = np.ones((3,3), np.uint8)
    dilation = cv2.dilate(th1, kernal, iterations=2)
    erosion = cv2.erode(dilation, kernal, iterations=1)
    opening = cv2.morphologyEx(erosion, cv2.MORPH_OPEN, kernal, iterations=3)
    closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernal, iterations=4)

    out_imgpath = os.path.join(path, "1-"+base_filename)

    cv2.imwrite(out_imgpath ,closing)
    dataset2 = gdal.Open(out_imgpath, gdal.GA_Update)
    dataset2.SetGeoTransform( geotransform )
    dataset2.SetProjection( projection )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...