我执行了一个程序,它从目录中读取所有value=127.0.01
个文件,执行面部检测,裁剪面部并保存它们。
问题在于,当运行官方python程序时,我能够检测到所有面部,但它只能从每个图像中保存少量面部。
我做错了什么?
.jpg
答案 0 :(得分:0)
正如Gall在评论中所说,问题来自你的缩进。每个面都不会执行最后三行,因为它们的缩进不会使它们成为面上循环的一部分。你想要这样的东西:
modules/DefaultModule/static/
请注意,使用此代码时,可能会发生文件名冲突(图像中# Draw a rectangle around the faces
for (x, y, w, h) in faces:
image = image[y-top:y+h+bottom, x-left:x+w+right]
cv2.imwrite("cropped_{1}_{0}".format(str(file),str(x)), image)
的2个面相同)。您可能希望使用唯一的字符串来避免该问题。一个简单的计数器可以解决问题。
答案 1 :(得分:-1)
问题你的代码是当第一个人剪切图像时,以下已经尝试不剪切原始图像,并且已经从某个第一个人那里,所以你看起来认为每个人都会理解的代码
import numpy as np
import cv2
import sys
import glob
cascPath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascPath)
img = cv2.imread('3.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
#flags = cv2.cv.CV_HAAR_SCALE_IMAGE
flags=0
)
print "Found {0} faces!".format(len(faces))
left = 10
right = 10
top = 10
bottom = 10
i=0
count=0
for (x, y, w, h) in faces:
print x, y, w, h, i
i=i+1
img = img[y-top:y+h+bottom, x-left:x+w+right]
cv2.imwrite('foo{}.png'.format(count), img)
count += 1
img=cv2.imread('3.jpg')