実現したいこと・問題点
PythonでOpenCVを用いて画像からRGB値により特定の色を精度良く抽出したいです。
そのため、最も精度良く抽出できている最適なパラメータを取得するために、下限のパラメータを1ずつ増加させて画像を保存させています。
そのとき、ファイル名からパラメータがわかるよう画像を保存しているのですが、変数a,b,cがなぜか更新されません。
その結果、同じ画像名の画像が連続で出力され続けています。
しかし、フォルダを見ていると画像は少しずつ変化しているのでパラメータはおそらく更新できているはずです。
どなたか原因が分かる方教えていただけないでしょうか。
該当のソースコード
python3.8.5
1import os 2import cv2 3import shutil 4import glob 5import numpy as np 6from time import sleep 7from PIL import Image 8 9cwd = os.getcwd() 10 11#file name 12img_dir = "E:/b/" 13out = "output" 14 15#Lower param 16lb = 34 17lg = 3 18lr = 53 19 20#Upper param 21ub = 114 22ug = 75 23ur = 150 24 25#Threshold 26lower = 200 27upper = 1500 28 29def test(): 30 path = glob.glob(img_dir + "/*png") 31 outPath = img_dir + "/" + out 32 os.makedirs(outPath, exist_ok=True) 33 for aaa in range (55): 34 for bbb in range(36): 35 for ccc in range(48): 36 for i in path: 37 a = lb + aaa 38 b = lg + bbb 39 c = lr + ccc 40 name = os.path.basename(i) 41 image = cv2.imread(i) # ファイル読み込み 42 bgrLower = np.array([a, b, c]) # 抽出する色の下限 43 bgrUpper = np.array([ub, ug, ur]) # 抽出する色の上限 44 bgrResult = bgrExtraction(image, bgrLower, bgrUpper) 45 w,h,c = bgrResult.shape 46 47 count = 0 48 #全画素を探索してクロ以外の画素をカウント upper以上になったらストップ 49 for i in range(w): 50 for j in range(h): 51 imgdata = bgrResult[i,j] 52 b,g,r = imgdata 53 if b != 0 and g != 0 and r !=0: 54 count += 1 55 elif count == upper: 56 break 57 else: 58 continue 59 break 60 61 #lower以上 uppr以下 であれば画像を保存 62 if count < lower and count > upper: 63 continue 64 cv2.imwrite(os.path.join(outPath , str(a) + "." + str(b) + "." + str(c) + "-" + name ),bgrResult) 65 print(os.path.join(outPath , str(a) + "." + str(b) + "." + str(c) + "-" + name )) 66 67# BGRで特定の色を抽出する関数 68def bgrExtraction(image, bgrLower, bgrUpper): 69 img_mask = cv2.inRange(image, bgrLower, bgrUpper) # BGRからマスクを作成 70 result = cv2.bitwise_and(image, image, mask=img_mask) # 元画像とマスクを合成 71 return result 72 73if __name__ == '__main__': 74 test()
試したこと
下から二行目のところで計算式を入れていたのがいけないのかと思い、変数に代入してからファイル名に入力:結果は変わらず
ファイル名に連番を追加:画像は別々に保存できるが肝心のパラメータがわからないため失敗
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/24 03:28