2016-04-30 5 views
1

Я использую приведенный ниже код для обнаружения лица:Python - изменить размер изображения

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 

В конце концов, я хочу, чтобы обрезать лицо в файлы изображений и изменять их в 92x112. Это то, что я пытаюсь с

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

Когда я запускаю это я получаю

OpenCV Ошибка: Утверждение не удалось (dsize.area() || (inv_scale_x> 0 & & inv_scale_y> 0)) в изменении размера, file /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/imgproc/src/imgwarp.cpp, строка 1835 Traceback (последний последний звонок): Файл «1track.py», строка 48, в cropped = cv2.resize (обрезано, 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) в функции изменения размера

Любая помощь будет замечательной. Извините, если th equion - это глупо, я абсолютный новичок в программировании, код выше - результат поиска. Спасибо!

ответ

0

Чтобы изменить размер изображения для новых измерений, вам необходимо знать соотношение между новыми измерениями и текущими. Так что если вы хотите установить (например) с разрешением 640x480 изображение в 92x112 изображение:

92/640 = 0,143 112/480 = 0,233

Вы можете использовать эти соотношения в функции cv2.resize:

cropped = cv2.resize(cropped, (0,0), fx=0.143, fy=0.233) 
Смежные вопросы