質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

0回答

937閲覧

アノテーションで囲まれた部分を画像ファイルで出力したい

syo_fr

総合スコア4

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2020/09/24 05:16

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)

ファイル形式が異なっているのが原因のようなのですが、どう書き換えれば画像を書き出せるようになるかわかりません。
もしわかる方がいらっしゃれば教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問