2016-04-16 5 views
0

Ich entwickle ein Programm, um die Gesichter aus großen Bildern in Python zu schneiden. Allerdings habe ich ein Problem, sie sogar zu sehen.Arbeiten mit großen (über 3000x3000) Bildern in OpenCV, und sie passen nicht in meinen Bildschirm

Die Bilder, mit denen ich arbeite, können mehr als 2000x2000 betragen und passen nicht auf meinen Bildschirm. Dies ist der Code:

import cv2 
import sys 

# Get user supplied values 
imagePath = sys.argv[1] 
cascPath = sys.argv[2] 

# Create the haar cascade 
faceCascade = cv2.CascadeClassifier(cascPath) 

# Read the image 
image = cv2.imread(imagePath) 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

# Detect faces in the image 
faces = faceCascade.detectMultiScale(
    gray, 
    scaleFactor=1.2, 
    minNeighbors=5, 
    minSize=(100, 100), 
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE 
) 

print "Found {0} faces!".format(len(faces)) 

# Draw a rectangle around the faces 
for (x, y, w, h) in faces: 
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) 


cv2.NamedWindow(name, flags=WINDOW_NORMAL) 
cv2.imshow("Faces found", image) 
cv2.waitKey(0) 

Und das ist der Teil mit mir aus:

cv2.NamedWindow(name, flags=WINDOW_NORMAL) 
cv2.imshow("Faces found", image) 
cv2.waitKey(0) 

nun die opencv Dokumentation hat instructions, wie Fenstergröße zu ändern, aber so weit ich erhalte Fehler:

Fehler 1:

Found 2 faces! 
Traceback (most recent call last): 
    File "face_detect.py", line 31, in <module> 
    cv2.NamedWindow(name, flags=WINDOW_NORMAL) 
AttributeError: 'module' object has no attribute 'NamedWindow' 

Fehler 2:

Found 2 faces! 
Traceback (most recent call last): 
    File "face_detect.py", line 31, in <module> 
    cv2.namedWindow("", WINDOW_NORMAL) 

NameError: name 'WINDOW_NORMAL' is not defined 

Fehler 3:

File "face_detect.py", line 31 
    cv2.namedWindow(winname[, WINDOW_NORMAL]) 
          ^
SyntaxError: invalid syntax 

Kann mir jemand zeigen, was ich falsch mache?

+0

Es könnte einen Versuch wert sein, das Paket mit 'sudo apt-get install python-opencv' erneut zu installieren ... :) – filaton

+2

@filaton Das ist ein bisschen eine drastische Korrektur für ein paar Tippfehler. – Suever

+0

@Suever Richtig! :) Aber ich erinnere mich an einige Fälle, wo OpenCV die gleiche Ausnahme geworfen hat, wenn sie nicht richtig installiert wurde, deshalb habe ich gesagt, dass es sich lohnt. – filaton

Antwort

5

Sie haben cv2.NamedWindow statt cv2.namedWindow falsch eingegeben, notieren Sie den Fall. Außerdem muss WINDOW_NORMALcv2.WINDOW_NORMAL sein. Dann können Sie cv2.resizeWindow verwenden, um die gewünschte Größe einzustellen.

# Specify an appropriate WIDTH and HEIGHT for your machine 
WIDTH = 1000 
HEIGHT = 1000 

cv2.namedWindow('image', cv2.WINDOW_NORMAL) 
cv2.imshow('image', image) 
cv2.resizeWindow('image', WIDTH, HEIGHT) 

Als Randbemerkung, wenn die Dokumentation das folgende Format

cv2.namedWindow(winname[, flags]) 

Das bedeutet, dass []flags ist eine optional Positionseingabe verwendet. Es ist keine gültige Python-Syntax und kann daher nicht in Ihren Code kopiert/eingefügt werden.

+0

Es gab mir: "' NameError: Name 'WIDTH' ist nicht definiert ". Wo füge ich die Breite hinzu? – Rich

+0

@David Je nach Bildschirmgröße geben Sie 'BREITE' und' HÖHE' an. – Suever

+0

OK, verstanden. Es funktioniert jetzt gut, danke. – Rich