【问题标题】:Crop multi image from folder if name image matches image_id in csv file in Python如果名称图像与 Python 中 csv 文件中的 image_id 匹配,则从文件夹中裁剪多张图像
【发布时间】:2019-09-27 09:27:26
【问题描述】:

我有一个 csv 文件中大约 300 个 image_id 和边界框位置的列表。我还有一个包含大约 300 个图像的文件夹,每个图像 id 都与每个图像的名称相匹配。如何比较图片的名称和image_id,如果匹配我,我会裁剪它。

我使用python语言和ubuntu os。

【问题讨论】:

  • 您的数据不在 CSV 文件中...
  • 这在逻辑上属于你的另一个问题stackoverflow.com/a/58119037/2836621 删除带有注释# Ignore header lines 的块并将以下块替换为filename = fieldA + ".jpg"

标签: python csv image-processing artificial-intelligence bounding-box


【解决方案1】:
import os, pandas

data = pandas.read_csv(your_csv_file) #read csv file

# Get the directory of images
path = "path folder"

#Edit2 you may have to add dtype str, as pandas will assume int if you only have integers
dirs = os.listdir( path, dtype=str ) #get all files in folder

# Get all the files and split at '.' to get the names
listoffiles = []
for file in dirs:
    basename = os.path.splitext(file)[0] #this will get you the basename 
    listoffiles.append(basename)         #you will have a list of all filenames

matches = data[data['image_id'].isin(listoffiles)] #now in matches you have a table containing only rows that correspond to filenames
print(matches.head()) 

希望这会有所帮助。

编辑: 您可以稍后迭代匹配以实际进行裁剪:

for index, row in matches.iterrows():
     print(row['image_id'], row['bounding_box'])
     # do cropping here

【讨论】:

    【解决方案2】:

    在我看来,您可以在 json.loads 方法的基础上构建

    In [23]: from json import loads 
        ...:  
        ...: data = '''\ 
        ...: 1693884003  {'right': 0.6428571428571429, 'bottom': 0.9761904761904762, 'top': 0.38095238095238093, 'left': 0.22857142857142856} 
        ...: 1693884030  {'right': 0.6571428571428571, 'bottom': 0.9285714285714286, 'top': 0.38095238095238093, 'left': 0.3142857142857143} 
        ...: 1735837028  {'right': 0.68, 'bottom': 0.9, 'top': 0.4, 'left': 0.34} 
        ...: 1740301012  {'right': 0.6142857142857143, 'bottom': 0.9523809523809523, 'top': 0.38095238095238093, 'left': 0.35714285714285715} 
        ...: 1779624112  {'right': 0.7142857142857143, 'bottom': 0.9047619047619048, 'top': 0.5357142857142857, 'left': 0.21428571428571427}\ 
        ...: ''' 
        ...: images = {} 
        ...: for line in data.splitlines(): 
        ...:     image, bounds = line.split(' ', 1) 
        ...:     images[image] = loads(bounds.replace("'", '"')) 
        ...: from pprint import pprint 
        ...: pprint(images) 
    {'1693884003': {'bottom': 0.9761904761904762,                                                                                             
                    'left': 0.22857142857142856,                                                                                              
                    'right': 0.6428571428571429,                                                                                              
                    'top': 0.38095238095238093},                                                                                              
     '1693884030': {'bottom': 0.9285714285714286,                                                                                             
                    'left': 0.3142857142857143,
                    'right': 0.6571428571428571,
                    'top': 0.38095238095238093},
     '1735837028': {'bottom': 0.9, 'left': 0.34, 'right': 0.68, 'top': 0.4},
     '1740301012': {'bottom': 0.9523809523809523,
                    'left': 0.35714285714285715,
                    'right': 0.6142857142857143,
                    'top': 0.38095238095238093},
     '1779624112': {'bottom': 0.9047619047619048,
                    'left': 0.21428571428571427,
                    'right': 0.7142857142857143,
                    'top': 0.5357142857142857}}
    
    In [24]: 
    

    请注意,我从字符串中读取,而您将从打开的文件中读取,
    另请注意,json.loads 仅需要双引号作为分隔符,因此在使用 json.loads 之前,我们必须将数据中的单引号 replace 用双引号括起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2022-11-11
      • 2013-12-15
      • 1970-01-01
      相关资源
      最近更新 更多