2

I'm using the code below (which is a googling result) to detect faces:

import io import picamera import cv2 import numpy import PIL from PIL import Image from resizeimage import resizeimage #Load a cascade file for detecting faces face_cascade = cv2.CascadeClassifier('/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml') #Create a memory stream so photos doesn't need to be saved in a file stream = io.BytesIO() #Get the picture (low resolution, so it should be quite fast) #Here you can also specify other parameters (e.g.:rotate the image) with picamera.PiCamera() as camera: camera.resolution = (640, 480) camera.vflip = False camera.hflip = False camera.brightness = 60 camera.capture(stream, format='jpeg') #Convert the picture into a numpy array buff = numpy.fromstring(stream.getvalue(), dtype=numpy.uint8) #Now creates an OpenCV image image = cv2.imdecode(buff, 1) #Load a cascade file for detecting faces #face_cascade = cv2.CascadeClassifier('/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml') #Convert to grayscale gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #Look for faces in the image using the loaded cascade file faces = face_cascade.detectMultiScale(gray, 1.1, 5) print "Found "+str(len(faces))+" face(s)" #Draw a rectangle around every found face #Crop faces and save to separate files id = 1 for (x,y,w,h) in faces: cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,0),2) cropped = image[ y : y+h, x : x+w ] #RESIZE IMAGE to 92x112 cropped = cv2.resize(cropped,None,92,112) cv2.imwrite("../reco/test_faces/cropped_face" + str(id) + ".png", cropped) id = id + 1 

At the end I want to crop the faces into image files and resize them to 92x112. This is what I try with:

cropped = cv2.resize(cropped,None,92,112) 

When I run this I get:

OpenCV Error: Assertion failed (dsize.area() || (inv_scale_x > 0 && inv_scale_y > 0)) in resize, file /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/imgproc/src/imgwarp.cpp, line 1835 Traceback (most recent call last): File "1track.py", line 48, in <module> cropped = cv2.resize(cropped,None,92,112) cv2.error: /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/imgproc/src/imgwarp.cpp:1835: error: (-215) dsize.area() || (inv_scale_x > 0 && inv_scale_y > 0) in function resize 

1 Answer 1

1

To resize the image to new dimensions, you need to know the ratio between the new dimensions and the current ones. So if you want to set (for example) a 640x480 image into a 92x112 image:

92/640=0.143 112/480=0.233

You use these ratios in the cv2.resize function:

cropped = cv2.resize(cropped, (0,0), fx=0.143, fy=0.233) 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.