使用从txt文件中提取的尺寸裁剪图像



我想使用PIL或opencv2在文件夹中裁剪多个图像。但是,我有一个文本文件中的尺寸,文件名与图像相同。假设我的文件名是1_a.jpg,尺寸(左上角.x,宽度;左上角-x,高度)在1_a.txt文件中。因此,我的程序必须遍历每个文件,选择尺寸并裁剪图像。我使用了一个类似的设置,我试图将列表中的所有维度单独附加,然后尝试在裁剪时迭代指向列表的图像,但这不起作用。请帮忙。

在下面找到我的代码:-

for f in glob.glob(os.path.join(faces_folder_path, "*.txt")):
    file = open(f)
    small=[]
    data= file.read()
    print type(data)
    small.append(data.rstrip('n'))
    print small
    print small[1]
    print type(small)
    x.append(small)
    print type(x)
    print x
    # print type(list)
    # print list
    # # print x
    # x.append(list)
    # for i,val in enumerate(x):
    #     print val[0]

for f in glob.glob(os.path.join(faces_folder_path, "*.png")):
    imgfile = f[53:75]
    print imgfile
    img=cv2.imread(imgfile)
    cv2.imshow('image',img)
    print (x[i])
    print type(x[i])
    # new_image=img[x[i]]
    # cv2.imshow('cropped',new_image)
    # cv2.imsave('imgfile',new_image)
    i+=1
    cv2.waitKey(0)

您最好只循环浏览所有PNG文件,每次尝试查找匹配的文本文件,如下所示:

import glob
import os
import re
faces_folder_path = r"c:myfiles"
for png_file in glob.glob(os.path.join(faces_folder_path, "*.png")):
    name, ext = os.path.splitext(os.path.basename(png_file))
    try:
        with open(os.path.join(faces_folder_path, '{}.txt'.format(name))) as f_text:
            re_crop = re.search(r'(d+),(d+);(d+),(d+)', f_text.read())
            if re_crop:
                x, width, y, height = [int(v) for v in re_crop.groups()]
                # Add crop code here
            else: 
                print '"{}" text file format not understood'.format(png_file)
    except IOError as e:
        print '"{}" has no matching txt file'.format(png_file)

这将获取每个png文件的文件路径,并提取基本文件名。然后,它构造一个匹配的txt文件,将其加载到中,并使用正则表达式尝试查找所需的裁剪详细信息。每个条目被转换为int

这假设一个示例文本文件看起来像这样:

0,100;10,50

相关内容

  • 没有找到相关文章

最新更新