現在のコードとして,
from pathlib import Path import cv2 import numpy as np import shutil import matplotlib.pyplot as plt import glob files = glob.glob("./3/./1.2/*") for f in files: img = cv2.imread(f) cut = img[460:1270, 130:940] z=1*810/1478 gray = cv2.cvtColor(cut, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) binary = cv2.dilate(binary, kernel) contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) rects = [] for cnt in contours: if cv2.contourArea(cnt) < 4000: continue rect = cv2.minAreaRect(cnt) rects.append(rect) def crop(cut, rect): center, size, angle = rect center = tuple(map(int, center)) size = tuple(map(int, size)) j, k = cut.shape[:2] M = cv2.getRotationMatrix2D(center, angle, 1) rotated = cv2.warpAffine(cut, M, (k, j)) im2 = cv2.getRectSubPix(rotated, size, center) return im2 for i, rect in enumerate(rects): im2 = crop(cut, rect) hsv = cv2.cvtColor(im2, cv2.COLOR_BGR2HSV) h, s, v = cv2.split(hsv) mean = v[v < 230].mean() if mean < 170: save_path = './phyto/debug_%d.jpg' % i print(save_path) cv2.imwrite(save_path, im2) else : y, x = im2.shape[:2] a=max(y,x) b=z*a/810 print('','',y,x,a,'大きさ:{0}'.format(b)) if a < 100: continue elif 100 < a < 250: save_path = './pu1/debug_%d.jpg' % i print(save_path) cv2.imwrite(save_path, im2) elif 250 < a < 400: save_path = './pu2/debug_%d.jpg' % i print(save_path) cv2.imwrite(save_path, im2) elif 400 < a : save_path = './pu3/debug_%d.jpg' % i print(save_path) cv2.imwrite(save_path, im2) コード
となっているのですが,実行すると,
133 149 149 大きさ:0.10081190798376183
./pu1/debug_0.jpg
111 95 111 大きさ:0.07510148849797023
./pu1/debug_0.jpg
./phyto/debug_1.jpg
127 59 127 大きさ:0.08592692828146144
./pu1/debug_2.jpg
809 598 809 大きさ:0.547361299052774
./pu3/debug_3.jpg
118 202 202 大きさ:0.13667117726657646
./pu1/debug_0.jpg
93 104 104 大きさ:0.07036535859269283
./pu1/debug_0.jpg
となり,
保存するときにdebug0.jpgなどが上書きされてしまっております。
おそらく,初めのforの処理をするときに,毎回debug_0.jpgという名前で保存するプログラムになってしまっていると思うのですが,
初めのforのでn番目の画像処理をするときにdebug-n_0.jpgなどの名前で保存することはできないでしょうか。
コード修正宜しくお願いします。
pythonのversionは3.7.3で,
opencvのversionは4.1.1です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 01:47
2019/11/19 02:06
2019/11/19 02:18
2019/11/19 02:45
2019/11/19 03:44
2019/11/19 04:18
2019/11/19 04:32
2019/11/19 04:35
2019/11/19 04:49