VIAというアノテーションソフトを使って囲んだ部分のjsonファイルを使って、画像から囲んだ部分だけをとりだそうとしていますが。ファイルの書き出しが上手くいかないので教えていただきたいです。
まず、コードは以下のような感じです。
python
1def make_dataset_for_VIA(json_filename,base_dir,has_size_fitting=False): 2 import json 3 import os 4 import sys 5 sys.stdout.flush() 6 print 'the paramater of "has_size_fitting" is %s' % (str(has_size_fitting),) 7 8 with open(os.path.join(base_dir,json_filename), 'r') as fp: 9 tree = json.load(fp) 10 result = [] 11 for v in tree['_via_img_metadata'].itervalues(): 12 filename = v['filename'] 13 full_filename = os.path.join(base_dir, filename) 14 if not os.path.isfile(full_filename): 15 print('there is no file named %s!'%(full_filename,)) 16 continue 17 # raise IOError(full_filename) 18 sys.stdout.write('.') 19 sys.stdout.flush() 20 basename, ext = os.path.splitext(filename) 21 regions = v['regions'] 22 arr = cv2.imread(os.path.join(base_dir, filename)) 23 bboxes = [] 24 wh = [] 25 img = [] 26 27 for r in v['regions']: 28 attr = r['shape_attributes'] 29 width = attr['width'] 30 height = attr['height'] 31 32 xmin = attr['x'] 33 ymin = attr['y'] 34 xmax = xmin + width 35 ymax = ymin + height 36 bboxes.append([ymin, xmin, ymax, xmax]) 37 38 39 wh.append([width,height]) 40 if not has_size_fitting: 41 img.append(trim_img(arr,[ymin, xmin, ymax, xmax]))#arr:フライの元画像 42 if len(bboxes) == 0: 43 continue 44 if has_size_fitting: 45 stride = 5 46 maxw,maxh = check_maximum_width_and_height(wh) 47 for index,(ymin,xmin,ymax,xmax) in enumerate(bboxes): 48 width_tmp = xmin-xmax 49 xmin -= stride 50 xmax = xmin + maxw+stride 51 bboxes[index][1] = xmin 52 bboxes[index][3] = xmax 53 height_tmp = xmin-xmax 54 ymax = ymin + maxh+stride 55 ymin -= stride 56 bboxes[index][2] = ymax 57 bboxes[index][0] = ymin 58 59 for coords in bboxes: 60 img.append(trim_img(arr,coords)) 61 62 bboxes = np.array(bboxes, np.float32) 63 result.append((filename,bboxes,wh,img)) 64 sys.stdout.write('\n') 65 sys.stdout.flush() 66 return result 67 68def main(): 69 a = make_dataset_for_VIA('size_sample_expand.json','data',has_size_fitting=False) 70 for i in range(len(a)):#aの長さだけ回す 71 img = a[i][3]#img画 72 filename = 'grabcut_result_id=%d.png' % (i) 73 cv2.imwrite(os.path.join('good_data',filename),img) 74 75if __name__ == '__main__': 76 a = make_dataset_for_VIA('size_sample_expand.json','data',has_size_fitting=False) 77 for i in range(len(a)):#aの長さだけ回す 78 img = a[i][3]#img画像 79 filename = 'result_id=%d.png' % (i) 80 cv2.imwrite(os.path.join('good_data',filename),img)
cv2.imwriteで二期だしたい部分の画像の書き出しができると思ったのですが、上手くいきません...
エラーとしてはこのようなものが出ました。![]
(819628474615f3490540bdf8eab4ad0b.png)
ファイル形式が異なっているのが原因のようなのですが、どう書き換えれば画像を書き出せるようになるかわかりません。
もしわかる方がいらっしゃれば教えていただきたいです。
あなたの回答
tips
プレビュー