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
- ich die Position der Bilder zugeordnet haben (für den Start Ich bin nur 4 Bilder unter Berücksichtigung).
- Imstack wird verwendet, um ein Bild (als Basisbild) zu lesen, über das der Layover (Überlagerung) stattfindet.
- 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 .
- 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.
- 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()
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
Beachten Sie, dass Sie os.path.expanduser im zweiten, aber nicht im ersten gelesenen –
@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