2017-12-17 5 views
-2

Ich möchte eine bestimmte Menge von Bildern der gleichen Größe (die AT & T Gesichtsbilder Datenbank) überlagern. Ich habe den Code geschrieben, dies zu tun, die funktioniert wie folgt:OpenCV Fehler in der Größe() Python

  1. ich die Position der Bilder zugeordnet haben (für den Start Ich bin nur 4 Bilder unter Berücksichtigung).
  2. Imstack wird verwendet, um ein Bild (als Basisbild) zu lesen, über das der Layover (Überlagerung) stattfindet.
  3. Eine for-Schleife wird ausgeführt, die alle Bilder durchläuft und sie zu dem Basisbild (imstack) hinzufügt. Dieses Addieren erfolgt durch Verwendung der addWeighted() - Funktion mit den Parametern als das aktuelle Bild (im) und das Basisbild (Imstack) mit den Alpha-Werten als 0,5 .
  4. Nachdem die Schleife bis zur Fertigstellung ausgeführt wurde (alle Bilder sind überlagert auf dem Basisbild), habe ich versucht, den aktualisierten Imstack als 'compiledimg' zu drucken, indem ich die imshow() verwende.
  5. Weiter habe ich die Option hinzugefügt, um die 'compiledimg' Datei durch 's' zu speichern.

Fehler:

imstack = cv2.resize (imstack, (97.113)) cv2.error: /build/opencv-RI6cfE/opencv-2.4.9.1+dfsg1/modules/imgproc/ src/imgwarp.cpp: 1834: Fehler: (-215) ssize.area()> 0 in Funktion die Größe

import cv2 
import numpy as np 
import os 

fnames =['~/Downloads/1.pgm','~/Downloads/2.pgm','~/Downloads/3.pgm'] 

imstack=cv2.imread('~/Downloads/4.pgm') 

imstack=cv2.resize(imstack,(97,113)) 

for path in fnames: 
    im=cv2.imread(os.path.expanduser(path)) 

    imstack=cv2.addWeighted(imstack,0.5,im,0.5,0) 

    imstack=cv2.resize(imstack,(97,113)) 

cv2.imshow('compiledimg.jpg',imstack) 

k = cv2.waitKey(0) & 0xFF 

if k == 27:   
    cv2.destroyAllWindows() 

elif k == ord('s'): 
    cv2.imwrite('compiledimg.jpg',imstack) 
cv2.destroyAllWindows() 
+0

stellen Sie sicher, wird das Bild geladen, nach der imread Funktion, Druckform, um zu sehen, ob das Bild richtig geladen wurde (es soll (Höhe, Breite drucken , Kanäle), wenn Sie 0,0 sehen, dann ist es nicht geladen). Überprüfen Sie, dass Sie den Dateipfad richtig geschrieben haben, und ich würde vorschlagen, einen vollständigen Pfad ohne Abkürzungen zu verwenden – api55

+0

Beachten Sie, dass Sie os.path.expanduser im zweiten, aber nicht im ersten gelesenen –

+0

@Dimitrii verwenden, da ich den Imstack verwende als ein Basisbild, über das die anderen Bilder überlagern. Wo wie in der zweiten Version, wo ich lese, wird sich das Bild 'im' für jeden Pfad ändern, deshalb gibt es einen os.path.expanduser, der sich nach jeder Iteration ändert. – Amrit

Antwort

0

ich in der Lage war, diesen Fehler zu beseitigen. Hauptsächlich habe ich zwei Fehler:

  1. korrigiert, um die Art, wie ich Pfade tat. Lies mehr Zeug und hab es endlich geschafft.

  2. Ich musste prüfen, ob die Leseeingabe als Imstack überhaupt gelesen wurde oder nicht, und da mein Pfad vorher falsch war, wurde er als NULL eingegeben, daher der Fehler.

Wo 4.pgm ist das Basisbild und 2.pgm ist das Bild, das ich einen Test verwenden, damit ich nicht, was es auf dem Weg der Bilder enthalten, die überlagert werden.

Der improvisierte Teil des Codes ist wie folgt:

path='test/' 

#Appends all the absolute paths in the list image_paths 
image_paths = [os.path.join(path, f) for f in os.listdir(path) if not f.endswith('2.pgm')] 

#initializing a base_image over which other images will be superimposed 
base_image=cv2.imread('4.pgm') 

#resizing the base image so it matches the size of the database pics (113(rows),97(columns)) 
base_image=cv2.resize(base_image,(97,113)) 

#cv2.imshow('lol',base_image) //for testing purposes