[PYTHON] Beim Lesen eines Bildes mit SimpleITK tritt ein Problem auf, wenn sich Japanisch im Pfad befindet

Einführung

Ich denke, dass openCV und PIL als Python-Bildverarbeitungsbibliotheken bekannt sind, aber ich habe angefangen, SimpleITK zu verwenden, weil ich Dicom-Bilder direkt laden möchte. Zuerst habe ich einen einfachen Code geschrieben, um ein Bild mit SimpleITK zu lesen und anzuzeigen, aber plötzlich bin ich darauf gestoßen. .. .. Wenn der Pfad des Eingabebildes Japanisch enthält (wahrscheinlich nicht Englisch?), Scheint er aufgrund des Problems des Zeichencodes nutzlos zu sein. Da SimpleITK selbst eine kleinere Bibliothek ist, wird es möglicherweise nur von wenigen Personen verwendet, aber ich werde es vorerst freigeben.

PC-Umgebung

Über Simple ITK

Es scheint, dass SimpleITK (http://www.simpleitk.org/) eine C ++ - basierte Bildverarbeitungsbibliothek namens ITK (https://itk.org/itkindex.html) ist, die mit Python und Java verwendet werden kann. Es wird selten zur Verarbeitung medizinischer Bilder wie CT und MRT verwendet. Da medizinische Bilder häufig in einem Format namens Dicom gespeichert werden, kann SimpleITK Dicom-Bilder direkt lesen. Die Dokumentation (https://simpleitk.readthedocs.io/en/master/index.html) ist ziemlich solide, so dass Anfänger leicht anfangen können? (Nun, ich bin plötzlich gestolpert)

Installieren Sie SimpleITK

Einfach mit pip zu machen.

pip install SimpleITK

Bilder laden

Laden Sie die Bilder genau wie in der offiziellen Dokumentation "Lesen und Schreiben für Bilder und Transformationen" (https://simpleitk.readthedocs.io/en/master/Documentation/docs/source/IO.html) beschrieben. Stellen Sie jedoch sicher, dass der Pfad des Eingabebildes Japanisch enthält. Diesmal lautet der Code Lena (PNG-Format) anstelle des Dicom-Bildes.

read_image.py


import SimpleITK as sitk

file_name="C:/japanisch/Lenna_(test_image).png "#Damit funktioniert es nicht
#file_name="C:/Lenna_(test_image).png "#Funktioniert normal

reader = sitk.ImageFileReader()
reader.SetImageIO("PNGImageIO")
reader.SetFileName(file_name)
image = reader.Execute();

if ( not "SITK_NOSHOW" in os.environ ):
    sitk.Show( image, "image show" )#Zeigen Sie ein Bild mit ImageJ an.

Ergebnis

Ich erhalte eine Fehlermeldung, dass die Datei nicht gefunden werden kann, wie unten gezeigt.

RuntimeError: Exception thrown in SimpleITK ImageFileReader_Execute: D:\a\1\sitk-build\ITK\Modules\IO\PNG\src\itkPNGImageIO.cxx:149:
itk::ERROR: PNGImageIO(000001A1C5886F00): PNGImageIO could not open file: C:/japanisch/Lenna_(test_image).png for reading.
Reason: Illegal byte sequence

** Gegenmaßnahme **

Wenn Sie den Pfad des Bildes so ändern, dass es kein Japanisch enthält, funktioniert es normal.

Blick auf die Probleme auf Github ...

Verwenden Sie kein Chinesisch auf Ihrem Weg! Es scheint einige Leute zu geben, die besorgt sind. (https://github.com/SimpleITK/SimpleITK/issues/795 ) Der Zeichencode der Python-Zeichenfolge ist Unicode, aber die ITK-Seite argumentiert, dass der Zeichencode ASCII ist. ASCII unterstützt kein Japanisch. Wenn also die ITK-Seite nur ASCII lesen kann, müssen möglicherweise alle Pfade alphabetisch angegeben werden. .. ..

Zusammenfassung

Fügen Sie bei Verwendung von SimpleITK kein Japanisch in den Pfad des Bildes ein. Ich werde es aktualisieren, wenn ich die zugrunde liegende Lösung finde.

Recommended Posts

Beim Lesen eines Bildes mit SimpleITK tritt ein Problem auf, wenn sich Japanisch im Pfad befindet
Wenn im Python-Wörterbuch auf einen nicht vorhandenen Schlüssel zugegriffen wird, initialisieren Sie ihn mit einem beliebigen Wert
Feststellen, ob das Bild Vögel enthält
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Wenn verzweigen, hängt davon ab, ob die Liste ein bestimmtes Element enthält
[Für Anfänger] Unerwartetes Verhalten, wenn beim Festlegen des Pfads in Python "\" enthalten ist
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Beim Schreiben einer if-Anweisung mit einem regulären Ausdruck
Bestimmen Sie, ob im Objekt ein Attribut definiert ist
Das Problem, dass das Bild beim Laden mit PandasTools.LoadSDF nicht in ROMol angezeigt wurde, wurde behoben.
Wenn eine lokale Variable mit demselben Namen wie die globale Variable in der Funktion definiert ist
Behebt ein Problem, bei dem cv2.imread () beim Versuch, ein Bild zu lesen, keinen Fehler ausgibt, auch wenn der Pfad nicht übergeben wird
Gibt es eine Verzerrung in den Zahlen, die in den Fibonacci-Zahlen erscheinen?
Lösen Sie das japanische Problem, wenn Sie das CSV-Modul in Python verwenden.
Das Bild ist Namekuji
Problemumgehung für sys.argv wird nicht übergeben, wenn ein Python-Skript mit nur dem Dateinamen unter Python2.7 unter Windows ausgeführt wird
Was tun, wenn im Chrome-Webtreiber (Selenium) die Fehlermeldung "Beim Anzeigen dieser Webseite ist ein Problem aufgetreten" angezeigt wird?
Lassen Sie uns Fusion 360 mit Python Part 11 ausführen. Da die API keinen Punkt auf dem Pfad enthält, habe ich mir eine Alternative überlegt
Was tun, wenn ein Teil des Hintergrundbilds transparent wird, wenn Sie transparente Bilder mit Pillow kombinieren?
Python schlägt fehl, wenn nach dem Backslash ein Leerzeichen steht
Überprüfen Sie, ob die Einstellungsdatei leicht verständlich gelesen wird
Löschen Sie ein bestimmtes Zeichen in Python, wenn es das letzte ist
Lesen Sie die Datei in Python mit einem relativen Pfad aus dem Programm
Fehler mit pip: Beim Bestätigen des SSL-Zertifikats ist ein Problem aufgetreten
Lösung, wenn go's json.Marshal ein leeres Objekt zurückgibt
Lösen Sie Teilsummenprobleme mit der vollständigen Suche in Python
[Golang] Überprüfen Sie, ob eine bestimmte Zeichenfolge in der Zeichenfolge enthalten ist
Eine Geschichte, wenn ein Verzeichnis mit dem Befehl django-admin start project in einer virtuellen Umgebung mit Pipenv fehlerhaft ist
Überprüfen Sie, ob die ausführbare Datei und ihre abhängigen Bibliotheken ein bestimmtes Symbol enthalten (vereinfachte Version).
Achten Sie beim Erstellen einer Bildmaske mit Numpy auf den Typ
Verhalten bei der Rückkehr in den with-Block
Wenn das Ziel Ubuntu 16.04 in Ansible ist
Gibt es NaN im Pandas DataFrame?
Im Chainer-Tutorial wird beim Importieren eines Pakets eine Fehlermeldung angezeigt. (spotten)
Wenn ihr in der Scope-Küche das mit einem Rand machen könnt ~ ♪
So zeigen Sie im gesamten Fenster an, wenn Sie das Hintergrundbild mit tkinter einstellen
Wenn beim Tippen einer interaktiven Shell mit Anaconda eine lange Fehlermeldung angezeigt wird
Zeichnen Sie in Jupyter ein Diagramm mit japanischen Beschriftungen
Mit OpenJtalk auf Japanisch sprechen (Textdatei lesen)
Mit gTTS auf Japanisch sprechen (Textdatei lesen)
Was ist im Docker Python-Image pfeifend?
Bestimmen Sie die Zahlen in dem mit der Webkamera aufgenommenen Bild
Erkennen Sie Ordner mit demselben Bild in ImageHash
Gibt es keinen Standardwert im Wörterbuch?
Wenn eine Datei im freigegebenen Ordner von Raspberry Pi abgelegt wird, wird der Vorgang ausgeführt.
Ein Hinweis beim Überprüfen, ob der angegebene Schlüssel im definierten Wörterbuch mit Python vorhanden ist
Ich blieb stecken, als ich versuchte, einen relativen Pfad mit relative_to () in Python anzugeben
Konvertieren Sie eine Pfadzeichenfolge, die einen symbolischen Link in der Mitte verwendet, in einen absoluten Pfad
Beim Lesen einer CSV-Datei mit read_csv von Pandas wird die erste Spalte zum Index
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
Es gibt ein Muster, das das Programm bei Verwendung von Python-Threading nicht gestoppt hat
[Einführung in Python] Was ist das wichtige "if __name__ == '__ main__':" beim Umgang mit Modulen?
Ich habe nach dem Problem der Tribonatch-Sequenz in C ++ und der Anzahl der Funktionsaufrufe beim Schreiben mit einer Wiederholungsfunktion gefragt (Python ist ebenfalls verfügbar).
Wenn Sie mit python3 mit urllib auf eine URL zugreifen, die Japanisch (japanische URL) enthält, wird diese willkürlich mit HTML codiert, und es tritt ein Fehler auf. Notieren Sie sich daher die Problemumgehung