как поместить изображение из папки в цикл - PullRequest
0 голосов
/ 06 января 2020

У меня есть этот код. Но мне нужно найти xmin, xmax, ymin, ymax для всех изображений из папки и после этого поставить имя изображения, параметры в списке dict. Я не понимаю, как поместить это из папки в строку (#read изображение) (я имею в виду, img = cv2.imread ('C: \ Blobs \ SR1.png', cv2.IMREAD_UNCHANGED) - это нормально, но когда img = cv2.imread ('SR1.png', cv2.IMREAD_UNCHANGED) - ошибка). И если это возможно, как это сделать по циклу.

import os
FOLDER_PATH = r'C:\\Blobs'

def listDir(dir):
  fileNames = os.listdir(dir)
  for fileName in fileNames:
    print('File Name: ' + fileName)
    print('Folder Path: ' + os.path.abspath(os.path.join(dir,fileName)), 
sep='\n')
if __name__ == '__main__':
  listDir(FOLDER_PATH)##
import cv2

# read image
img = cv2.imread('C:\\Blobs\\SR1.png', cv2.IMREAD_UNCHANGED)

xmin = 0
ymin = 0
ymax = img.shape[0] - 1
xmax = img.shape[1] - 1

print('xmin       : ', xmin)
print('xmax       : ', xmax)
print('ymin       : ', ymin)
print('ymax       : ', ymax)

1 Ответ

1 голос
/ 06 января 2020

Учитывая, что xmin и ymin всегда будут 0, а xmax и ymax будут равны размерам изображения - 1. Вы можете использовать opencv пакет для него, вам нужно pip установить его. Если у вас есть это, вы можете просто сделать это:

import os
import cv2

def get_dimensions(img_path):
    # read image
    img = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)

    xmin = 0
    ymin = 0 
    ymax = 
    xmax = img.shape[1] - 1

    return {
        'xmin': 0,
        'xmax': img.shape[0] - 1,
        'ymin': 0,
        'ymax': img.shape[0] - 1
    }

def list_files(dir_path):
    files_and_folders = [
      os.path.abspath(os.path.join(dir_path,file_or_folder)) for file_or_folder in os.listdir(dir_path)
    ]
    return [file for file in files_and_folders if os.path.isfile(file)]


def get_img_data(dir_path):
    return [
        {**get_dimensions(img_path), 'name':os.path.basename(img_path)} for img_path in list_files(dir_path)
    ]

Это пример, я использую функцию get_img_data с путем /tmp/, она будет искать все файлы в этом каталоге и читать их (убедитесь, что путь к каталогу, который вы используете, содержит только изображения), затем в output я сохраняю результат, который я печатаю, он будет иметь значения xmin, xmax, ymin, ymax и name файла.

output = get_img_data('/tmp/')
print(output)
>>> '[{'xmin': 0, 'xmax': 199, 'ymin': 0, 'ymax': 199, 'name': 'a.png'}, {'xmin': 0, 'xmax': 199, 'ymin': 0, 'ymax': 199, 'name': 'b.png'}]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...