Die Umsetzung imread()
:
Mat imread(const string& filename, int flags)
{
Mat img;
imread_(filename, flags, LOAD_MAT, &img);
return img;
}
Dies ordnet die Matrix ein Bild als eine zusammenhängende Anordnung laden, entspricht. Dies hängt (zumindest teilweise) von der Leistung Ihrer Hardware ab: Ihr Computer muss 4 GB zusammenhängendes RAM-Array zuweisen können (wenn Sie sich auf einer Debian-Distribution befinden, können Sie Ihre RAM-Größe überprüfen, indem Sie beispielsweise vmstat -s -SM
ausführen).
Durch Neugier habe ich versucht, einen zusammenhängenden Speicherarray (ein großen, aber weniger als die Ihr 4 GB Bild erfordert) zu erhalten mit ascontiguousarray
, aber vorher, stolperte ich bereits auf einer Speicherzuordnungsproblem:
>>> img = numpy.zeros(shape=(35000,35000))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
>>>
in der Praxis, auch wenn Sie genug RAM haben, ist es keine gute Idee, die Pixel eines 4 GB RAM Bild zu manipulieren, und Sie müssen es trotzdem in Bezug auf regions of interests, kleinere Bereiche aufzuteilen und kann channels auch sein, abhängig von der na der Operationen, die Sie für die Pixel ausführen möchten.
EDIT 1:
Wie gesagt ich in meinem Kommentar unten Ihre Antwort, wenn Sie 16 GB RAM haben, und Sie sind in der Lage, das Bild mit scikit dann zu lesen, gibt es keinen Grund ist, dass Sie das nicht tun können, Gleiches gilt für OpenCV.
Bitte geben diesem einen Versuch:
import numpy as np # Do not forget to import numpy
import cv2
img = cv2.imread('ortho.tif')
Sie haben vergessen Numpy in Ihrem ursprünglichen Code zu importieren, und deshalb OpenCV offensichtlich das Bild konnte nicht geladen werden. Alle OpenCV-Array-Strukturen werden in Numpy-Arrays konvertiert, und das von Ihnen gelesene Bild wird von OpenCV als Arrays im Speicher dargestellt.
EDIT 2:
OpenCV mit imaes der Größe bis zu 10 GB umgehen kann.Aber das ist wahr, wenn es cv2.imwrite()
Funktion kommt. Für cv2.imread()
ist die Größe des zu lesenden Bildes jedoch viel kleiner: Das ist ein Fehler, der im September 2013 angekündigt wurde (Issue3258 #1438), der immer noch, AFAIK, nicht behoben ist.
Was sagt die Fehlermeldung? – Hexaholic
Für matplotlib plt.imshow (self.image [:,:, :: - 1]) Typeerror: 'NoneType' Objekt hat kein Attribut '\ _ \ _ GetItem \ _ \ _' OpenCV sais: OpenCV Fehler: Assertion fehlgeschlagen (size.width> 0 && size.height> 0) in cv :: imshow, Datei .. \ .. \ .. \ modules \ highgui \ src \ window.cpp, Zeile 261 cv2.imshow ('image', self.image) cv2.error: .. \ .. \ .. \ Module \ highgui \ src \ window.cpp: 261: Fehler: (-215) size.width> 0 && size.height > 0 in der Funktion cv :: imshow Im Wesentlichen ist es so, dass das Bild die Größe 0 x 0 Pixel hat. – cLupus
... und Sie sind sicher, dass dieses Zeug (und wenn ich das sage, ich meine OpenCV und Python) für 64 Bit kompiliert wurde? – carlosdc