Ich möchte OpenCV2.0 und Python2.6 verwenden, um Bilder mit geänderter Größe anzuzeigen. Ich habe das Beispiel unter http://opencv.willowgarage.com/documentation/python/cookbook.html verwendet und übernommen, aber leider ist dieser Code für OpenCV2.1 und scheint nicht mit 2.0 zu funktionieren. Hier mein Code:
import os, glob
import cv
ulpath = "exampleshq/"
for infile in glob.glob( os.path.join(ulpath, "*.jpg") ):
im = cv.LoadImage(infile)
thumbnail = cv.CreateMat(im.rows/10, im.cols/10, cv.CV_8UC3)
cv.Resize(im, thumbnail)
cv.NamedWindow(infile)
cv.ShowImage(infile, thumbnail)
cv.WaitKey(0)
cv.DestroyWindow(name)
Da kann ich nicht benutzen
cv.LoadImageM
ich benutzte
cv.LoadImage
Stattdessen war dies in anderen Anwendungen kein Problem. Trotzdem hat cv.iplimage keine Attributzeilen, Spalten oder Größe. Kann mir jemand einen Hinweis geben, wie man dieses Problem löst? Vielen Dank.
Antworten:
Wenn Sie CV2 verwenden möchten, müssen Sie die
resize
Funktion verwenden.Dadurch werden beispielsweise beide Achsen um die Hälfte verkleinert:
Dadurch wird die Bildgröße auf 100 Spalten (Breite) und 50 Zeilen (Höhe) geändert:
Eine andere Option ist die Verwendung des
scipy
Moduls mit:Es gibt offensichtlich mehr Optionen, die Sie in der Dokumentation dieser Funktionen lesen können ( cv2.resize , scipy.misc.imresize ).
Update:
Laut SciPy-Dokumentation :
Beachten Sie , dass Sie möglicherweise tatsächlich eine Größenänderung wünschen , wenn Sie die Größe ändern möchten
skimage.transform.rescale
.quelle
Beispiel Verdoppelung der Bildgröße
Es gibt zwei Möglichkeiten, die Größe eines Bildes zu ändern. Die neue Größe kann angegeben werden:
Manuell;
height, width = src.shape[:2]
dst = cv2.resize(src, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)
Durch einen Skalierungsfaktor.
dst = cv2.resize(src, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC)
Dabei ist fx der Skalierungsfaktor entlang der horizontalen Achse und fy entlang der vertikalen Achse.Um ein Bild zu verkleinern, sieht es im Allgemeinen mit der INTER_AREA-Interpolation am besten aus, während es zum Vergrößern eines Bildes im Allgemeinen mit INTER_CUBIC (langsam) oder INTER_LINEAR (schneller, aber immer noch in Ordnung) am besten aussieht.
Beispiel Bild verkleinern, um eine maximale Höhe / Breite zu erreichen (Seitenverhältnis beibehalten)
Verwenden Sie Ihren Code mit cv2
quelle
src = cv2.imread('YOUR_PATH_TO_IMG')
und das 'YOUR_PATH_TO_IMG' auf den Pfad deines eigenen Bildes bearbeitet?cv2.resize
automatisch verwendet Klotzen? Wie groß ist das Fenster, das mit der gewünschten Ausgabegröße erstellt wird(width/10, height/10)
?Sie können die GetSize-Funktion verwenden, um diese Informationen abzurufen. Cv.GetSize (im) gibt ein Tupel mit der Breite und Höhe des Bildes zurück. Sie können auch im.depth und img.nChan verwenden, um weitere Informationen zu erhalten.
Und um die Größe eines Bildes zu ändern, würde ich einen etwas anderen Prozess verwenden, mit einem anderen Bild anstelle einer Matrix. Es ist besser, mit demselben Datentyp zu arbeiten:
Hoffe das hilft ;)
Julien
quelle
quelle
cv2.resize
automatisch verwendet Klotzen? Wie groß ist das Fenster, das mit(w, target_height)
Argumenten erstellt wird?Hier ist eine Funktion zum Hoch- oder Verkleinern eines Bildes um die gewünschte Breite oder Höhe unter Beibehaltung des Seitenverhältnisses
Verwendung
Verwenden Sie dieses Beispielbild
Einfach auf
width=100
(links) verkleinern oder aufwidth=300
(rechts) hochskalierenquelle