I am trying to crop multiple faces from the same image using python and opencv but it is showing me error. If there is any other way of doing it please let me know. Below is the code along with the error.
import cv2
# Load some pre-trained data on face frontals from opencv (haar cascade algorithm)
trained_face_data = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Choose an image to detect faces in
img = cv2.imread('mask.png')
# Must convert to greyscale
grayscaled_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Detect Faces
face_coordinates = trained_face_data.detectMultiScale(grayscaled_img)
img_crop = []
# Draw rectangles around the faces
for (x, y, w, h) in face_coordinates:
cv2.rectangle(img, (x,y), (x+w, y+h), (0, 255, 0), 2)
img_crop.append(img[y:y+h, x:x+w])
cv2.imshow('Cropped', img_crop)
cv2.waitKey()
**TypeError** Traceback (most recent call last)
<ipython-input-4-7c85402c34e9> in <module>
32 [enter image description here][1]
33
---> 34 cv2.imshow('Cropped', img_crop)
35 #cv2.imshow('crop', img_crop2)
36 #cv2.imshow('Face Detector', img)
TypeError: Expected Ptr<cv::UMat> for argument 'mat'e here
One solution is, after storing all images in the list:
Display each image one at a time
Assume your input image:
Result:
If you want to save them, you could do:
Code: