物体検出で検出したものをディレクトリに保存
↓
同じ物体を検出(対象物を枠で囲ったときに2重してしまった場合)
↓
枠が被った値を計算し、規定値を上回ったらその画像は保存しない
[ここのブログ]を参考にしたのですが(https://qiita.com/neriai/items/e718290e8b14b0594008)
python
1# -*- coding: utf-8 -*- 2 3import cv2 4import matplotlib.pyplot as plt 5import matplotlib.patches as mpatches 6import selectivesearch 7import os 8 9 10def main(): 11 # loading lena image 12 img = cv2.imread("sample.png") 13 14 # perform selective search 15 img_lbl, regions = selectivesearch.selective_search( 16 img, 17 scale=500, 18 sigma=0.9, 19 min_size=10 20 ) 21 22 candidates = set() 23 24 for r in regions: 25 # excluding same rectangle (with different segments) 26 if r['rect'] in candidates: 27 continue 28 29 # excluding regions smaller than 2000 pixels 30 if r['size'] < 2000: 31 continue 32 33 # distorted rects 34 x, y, w, h = r['rect'] 35 36 if w / h > 1.2 or h / w > 1.2: 37 continue 38 39 candidates.add(r['rect']) 40 41 # draw rectangles on the original image 42 fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6)) 43 ax.imshow(img) 44 45 overlaps = {} 46 47 # オーバーラップの数をカウントして配列に代入します。 48 for x, y, w, h in candidates: 49 group = '%s_%s_%s_%s' % (x, y, w, h) 50 51 for x2, y2, w2, h2 in candidates: 52 if x2 - w < x < x2 + w2 and y2 - h < y < y2 + h2: 53 54 if not group in overlaps: 55 overlaps[group] = 0 56 57 overlaps[group] = overlaps[group] + 1 58 59 print overlaps 60 61 # オーバーラップの数が30以上のファイルを出力します(30は勝手に閾値を敷いています)。 62 for key, overlap in enumerate(overlaps): 63 if overlap > 30: 64 for x, y, w, h in candidates: 65 group = x + y + w + h 66 67 if group in overlaps: 68 cv2.imwrite("{ディレクトリパス}" + str(group) + '.png', img[y:y + h, x:x + w]) 69 70if __name__ == "__main__": 71 main()
このようなエラーが出ました
python
1 2--------------------------------------------------------------------------- 3TypeError Traceback (most recent call last) 4<ipython-input-95-91f2b2a72a36> in <module> 5 80 6 81 if __name__ == "__main__": 7---> 82 main() 8 9<ipython-input-95-91f2b2a72a36> in main() 10 71 # オーバーラップの数が30以上のファイルを出力します(30は勝手に閾値を敷いています)。 11 72 for key, overlap in enumerate(overlaps): 12---> 73 if overlap > 30: 13 74 for x, y, w, h in candidates: 14 75 group = x + y + w + h 15 '>' not supported between instances of 'str' and 'int'
overlapに入っているのは
{'216_17_111_94': 2, '561_266_234_209': 4, '561_266_234_195': 4, '561_266_234_207': 4, '214_15_116_99': 2, '525_266_270_225': 4}
なので">"が対応していないのはわかるのですが、どのように変更したらいいのか教えてください。
宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。