前提・実現したいこと
tensorflowで画像認識を行おうと思い、顔だけを切り取るプログラムを作ろうと考えました。
こちらのサイト(https://newtechnologylifestyle.net/opencv_face_trimingu/)を参考にさせていただき、プログラムを実行しました。
こちらのサイトでは、画像一枚に対して顔だけを切り取るプログラムだったので、ファイル内の画像すべて顔の切り取りを行うとプログラムを
改変したのですが、エラーでており、問題点が分かりません。
すみませんが、お力をお貸ししていただきたいです。
ソースコード
python
1import cv2 2import glob 3 4directory = 'D:/program/face/*.jpg' //顔の画像が入ったファイル 5path = 'D:/program/facecut/' //出力先のファイル 6HAAR_FILE = 'face.xml' 7cascade = cv2.CascadeClassifier(HAAR_FILE) 8c=0 9 10for image_picture in glob.glob('./face/*.jpg'): 11 img = cv2.imread(image_picture) 12 img_g = cv2.imread(image_picture,0) 13 face = cascade.detectMultiScale(img_g) 14 print(face) 15 for x,y,w,h in face: 16 face_cut = img[y:y+h, x:x+w] 17 c+=1 18 filename = path+'face_cut{}.jpg'.format(c) 19 cv2.imwrite(filename,face_cut)
発生している問題・エラーメッセージ
Traceback (most recent call last): File "d:/program/OneImageFaceCut.py", line 19, in <module> cv2.imwrite(filename,face_cut) NameError: name 'face_cut' is not defined
試したこと
for image_picture in glob.glob('./face/*.jpg'): img = cv2.imread(image_picture) img_g = cv2.imread(image_picture,0) face = cascade.detectMultiScale(img_g) print(face) for x,y,w,h in face: face_cut = img[y:y+h, x:x+w] c+=1 filename = path+'face_cut{}.jpg'.format(c) cv2.imwrite(filename,face_cut)
このようにfor文の外にcv2.imwrite()を出しました。すると、コンパイルは通り、顔が切り抜かれた画像が一枚だけ保存されていました。
一枚だけ出力されるというのは、なんとなくですが想像がつきますが、for文の中に入れた時にはコンパイルが通らないのかがよくわからないです。
補足情報(FW/ツールのバージョンなど)
opencv 4.0.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/17 13:42