Wieso zeigt Python das Bild nicht richtig an?
Hallo,
ich bin mal wieder auf ein Problem gestoßen, dass ich mit Google wohl einfach nicht lösen kann...
Folgendes sind die von mir importierten Module:
from tkinter import *
from tkinter.filedialog import askopenfilename
from threading import Thread
from PIL import Image, ImageTk
import cv2
import threading
import os
import time
import pickle
Und ein Ausschnitt des Codes meines Video Editors:
global Medien_Importierungen, Maximale_Breite, Maximale_Höhe
Videopfad = askopenfilename(filetypes =[('Video Files', '*.mp4')])
Geladenes_Video = cv2.VideoCapture(Videopfad)
Rückgabe, Einzelbild = Geladenes_Video.read()
if Einzelbild.shape[0] / Maximale_Höhe > Einzelbild.shape[1] / Maximale_Breite:
height = Maximale_Höhe
width = int(Einzelbild.shape[1] * height / Einzelbild.shape[0])
else:
width = Maximale_Breite
height = int(Einzelbild.shape[0] * width / Einzelbild.shape[1])
Einzelbild = cv2.resize(Einzelbild, (width, height))
Tkinter_Bild = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(Einzelbild, cv2.COLOR_BGR2RGB)))
Thumbnail = Label(Medien, image = Tkinter_Bild)
if Medien_Importierungen % 2 == 0:
Thumbnail.place(x = Fenster.winfo_screenwidth() * 0.01, y = Fenster.winfo_screenheight() / 10 + (Fenster.winfo_screenwidth() * 0.01 + Maximale_Höhe) * (int(Medien_Importierungen / 2)))
else:
Thumbnail.place(x = Fenster.winfo_screenwidth() * 0.11, y = Fenster.winfo_screenheight() / 10 + (Fenster.winfo_screenwidth() * 0.01 + Maximale_Höhe) * (int(Medien_Importierungen / 2)))
Medien_Importierungen += 1
Statt einem Bild wird jetzt nur ein weißes Bild angezeigt. Durch das verdoppeln der Zeile, in der ich die Funktion
Geladenes_Video.read()
angewendet habe, wurde auch nichts gelöst...
Bitte helft mir...
Alex
1 Antwort
da ich so unfassbar begabt mit python (danke chatgpt) kann ich mit stolz sagen
Das Problem, dass in deinem Code das Bild nicht richtig angezeigt wird, könnte auf mehrere Ursachen zurückzuführen sein. Hier sind einige Schritte zur Fehlersuche und Lösung des Problems:
- Überprüfen des
read
- Rückgabewertes:
- Stelle sicher, dass das Video erfolgreich gelesen wird und dass
Rückgabe
- den Wert
True
- hat. Falls nicht, ist möglicherweise der
Videopfad
- ungültig oder das Video kann nicht geöffnet werden.
- Füge einen Check hinzu, um sicherzustellen, dass das
Einzelbild
- korrekt geladen wird.
- Initialisierung von
Medien_Importierungen
- ,
Maximale_Breite
- , und
Maximale_Höhe
- :
- Stelle sicher, dass diese Variablen korrekt initialisiert sind, bevor sie im Code verwendet werden.
- Speichern der Bildreferenz:
- Tkinter kann das Bild nicht anzeigen, wenn die Referenz auf das
PhotoImage
- -Objekt (
Tkinter_Bild
- ) vom Garbage Collector entfernt wird. Du musst sicherstellen, dass die Referenz auf das
PhotoImage
- -Objekt erhalten bleibt.
Hier ist eine überarbeitete Version des Codes mit zusätzlichen Überprüfungen und Anpassungen:
python
Code kopieren
from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import Image, ImageTk
import cv2
# Initialisierung der globalen Variablen
global Medien_Importierungen, Maximale_Breite, Maximale_Höhe
Medien_Importierungen = 0 # Beispielwert
Maximale_Breite = 640 # Beispielwert
Maximale_Höhe = 480 # Beispielwert
# Erstellen des Tkinter Fensters
Fenster = Tk()
Fenster.geometry("800x600")
# Frame für Medien
Medien = Frame(Fenster)
Medien.pack()
# Laden des Videos
Videopfad = askopenfilename(filetypes =[('Video Files', '*.mp4')])
Geladenes_Video = cv2.VideoCapture(Videopfad)
Rückgabe, Einzelbild = Geladenes_Video.read()
if Rückgabe:
if Einzelbild.shape[0] / Maximale_Höhe > Einzelbild.shape[1] / Maximale_Breite:
height = Maximale_Höhe
width = int(Einzelbild.shape[1] * height / Einzelbild.shape[0])
else:
width = Maximale_Breite
height = int(Einzelbild.shape[0] * width / Einzelbild.shape[1])
Einzelbild = cv2.resize(Einzelbild, (width, height))
Tkinter_Bild = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(Einzelbild, cv2.COLOR_BGR2RGB)))
Thumbnail = Label(Medien, image=Tkinter_Bild)
Thumbnail.image = Tkinter_Bild # Halte eine Referenz auf das Bild
if Medien_Importierungen % 2 == 0:
Thumbnail.place(x=Fenster.winfo_screenwidth() * 0.01, y=Fenster.winfo_screenheight() / 10 + (Fenster.winfo_screenwidth() * 0.01 + Maximale_Höhe) * (int(Medien_Importierungen / 2)))
else:
Thumbnail.place(x=Fenster.winfo_screenwidth() * 0.11, y=Fenster.winfo_screenheight() / 10 + (Fenster.winfo_screenwidth() * 0.01 + Maximale_Höhe) * (int(Medien_Importierungen / 2)))
Medien_Importierungen += 1
else:
print("Fehler beim Laden des Videos")
Fenster.mainloop()
Änderungen und Ergänzungen:
- Initialisierung von
Medien_Importierungen
- ,
Maximale_Breite
- , und
Maximale_Höhe
- mit Beispielwerten.
- Einfache Tkinter-Fenstererstellung und Frame für Medien.
- Überprüfung, ob das Video erfolgreich gelesen wird (
Rückgabe
- ist
True
- ).
- Speicherung der Referenz auf das
PhotoImage
- -Objekt (
Thumbnail.image = Tkinter_Bild
- ).
Teste diesen Code und passe die Variablen und Logik nach Bedarf an. Wenn das Bild immer noch nicht angezeigt wird, überprüfe die Konsole auf Fehlermeldungen und stelle sicher, dass das Video korrekt gelesen wird.
ChatGPT nutze ich tatsächlich auch, das konnte mir auch nicht helfen... Und deine Antwort auch nicht so richtig... Deswegen bin ich doch auch auf dieser Plattform ._....