2016-07-27 3 views
1

PILまたはopencv2を使用して、フォルダ内の複数の画像を切り抜きたいと思います。しかし、私は画像と同じファイル名を持つテキストファイルの次元を持っています。 私のファイル名は1_a.jpg、寸法(top left.x、width、top left.x、height)は1_a.txtファイルにあるとします。 私のプログラムはすべてのファイルを繰り返し処理し、寸法を選択して画像をトリミングする必要があります。 私はリスト内のすべての次元を別々に追加して、トリミング中にリストを指しているイメージを反復しようとしているが、動作しない同様のセットアップを使用しています。 助けてください。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) 
+0

を私はあなたが2つのグロブ呼び出しが同じ順序で* .txtファイルと* .PNGファイルを返すことを想定していると思うが、それはあります必ずしも真実ではない。 (1)* .txtのループ中に、f [-4](ファイル名のマイナス '.txt')をキーとしてデータを辞書に格納します。例えば、d [f [ -4]] =小さい。その後、* .pngのループ中にd [f [-4]]にアクセスしてデータを取得します。 (2)ループを* .txtファイルにスキップし、* .pngファイルをループしている間に.txtファイルを読み込みます。 'f_text = open(f [-4] + '。txt')' –

+0

ありがとう!それは助けて! – Praveen

答えて

1

あなたはPNGファイルのすべてを単に周期に最もよい、と次のように一致したテキストファイルを見つけるために、各1つの試みのためになります

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 
+0

Martinに感謝します。出来た。 – Praveen

関連する問題