我目前正在尝试在一个数据集上运行此代码,其中包含多张戴安全帽的人的全身照片。
这是代码:
def detect_face(img):
heregray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.7, minNeighbors=5)
return faces
filename = ("C:\\Users\Vitaliy Yashchenko\\Desktop\\OpenCV Face recognition\\!!!\\dataset\\hattocrop")
for img in glob.glob(filename+'/*.*'):
var_img = cv2.imread(img)
face = detect_face(var_img)
print(face)
if (len(face) == 0):
continue
for(ex, ey, ew, eh) in face:
crop_image = var_img[ey:eh+ey, ex:ex+ew]
cv2.imshow("cropped", crop_image)
cv2.waitKey(0)
cv2.imwrite(os.path.join("outputs/",str(img)),crop_image)
由于 haarcascade 只识别脸部,所以我尝试用安全帽裁剪脸部,但我对轴 ex、ey、ew、eh 有点困惑。
如果我在相应的行中运行以下命令:
crop_image = var_img[ey:eh+ey+100, ex:ex+ew]
我得到了脸的下半部分。
在裁剪后的图像中定义脸部(头部)的较高部分的适当方法是什么,以便裁剪后的图像将包括安全帽?
我不确定问题是什么,但是: