cascadeファイルを使用することで特定の領域を黒く塗りつぶすコードを作成しました。
しかし、今のままでは一枚ずつしか処理を施すことが出来ない状態です。そこで、ディレクトリ内に含まれる複数の写真を一度に処理できるようにしたいです。
試したことはfor文を使用した他のコードを参照し、見よう見まねで記述してみたのですが上手くいきません。どなたかご教示お願いいたします。
ツリー:
/content/drive/My Drive/eye/A/(0).jpg
/content/drive/My Drive/eye/A/(1).jpg
/content/drive/My Drive/eye/A/(2).jpg
/content/drive/My Drive/eye/A/(3).jpg
/content/drive/My Drive/eye/B/(0).jpg
/content/drive/My Drive/eye/B/(1).jpg
/content/drive/My Drive/eye/B/(2).jpg
/content/drive/My Drive/eye/B/(3).jpg
/content/drive/My Drive/eye/C/(0).jpg
/content/drive/My Drive/eye/C/(1).jpg
/content/drive/My Drive/eye/C/(2).jpg
/content/drive/My Drive/eye/C/(3).jpg
/content/drive/My Drive/eye/D/(0).jpg
/content/drive/My Drive/eye/D/(1).jpg
/content/drive/My Drive/eye/D/(2).jpg
/content/drive/My Drive/eye/D/(3).jpg
コード:
from
1drive.mount('/content/drive') 2from __future__ import print_function 3import cv2 4 5# 顔検出インスタンス生成 6cascadePath = '/content/drive/My Drive/opencv-master/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml' 7faceCascade = cv2.CascadeClassifier(cascadePath) 8 9# 画像ファイル読み込み 10 11 12img = cv2.imread('/content/drive/My Drive/eye/A/(0).jpg') 13 14# 最小Windowサイズを定義 15minW = 0.1*640 16minH = 0.1*480 17 18# グレースケールに変換 19gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 20# 顔検出 21faces = faceCascade.detectMultiScale( 22 gray, 23 scaleFactor = 1.2, 24 minNeighbors = 3, 25 minSize = (int(minW), int(minH)), 26 ) 27 28# 検出箇所を塗りつぶすためのループ 29for x, y, w, h in faces: 30 img [y: y + h, x: x + w] = [0, 0, 0] #色指定 31 32# 画像保存 33cv2.imwrite('/content/drive/My Drive/eye/塗りつぶし.png',img)
見よう見まねで記述したコード
from google.colab import drive drive.mount('/content/drive') from __future__ import print_function import cv2 image_count =100 # 顔検出インスタンス生成 cascadePath = '/content/drive/My Drive/opencv-master/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml' faceCascade = cv2.CascadeClassifier(cascadePath) # 画像ファイル読み込み for i in range(image_count): img = cv2.imread('/content/drive/My Drive/eye/A/'+'('+str(i+1)+')'+'.jpg',cv2.IMREAD_COLOR) # 最小Windowサイズを定義 minW = 0.1*640 minH = 0.1*480 # グレースケールに変換 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 顔検出 faces = faceCascade.detectMultiScale( gray, scaleFactor = 1.2, minNeighbors = 3, minSize = (int(minW), int(minH)), ) # 検出領域を塗りつぶすためのループ for x, y, w, h in faces: img [y: y + h, x: x + w] = [0, 0, 0] #色指定 # 画像保存 cv2.imwrite('/content/drive/My Drive/eye/'+'('+str(i+1)+')' + '.jpg',img) # Do a bit of cleanup print("\n Exit Program")
回答1件
あなたの回答
tips
プレビュー