Warum funktioniert dieses Programm nicht?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
pywald
User
Beiträge: 45
Registriert: Mittwoch 6. Januar 2021, 15:51

Hallo,
Dieses Programm, das eigentlich das Bild als RGB-Farbwerte ausgeben sollte, funktioniert nicht. Warum?
Der Code:

Code: Alles auswählen

import glob, cv2
from numpy import*
from collections import Counter
pfad = "Onedrive\Dokumente\Bildanalyse"
jfif_dateien = glob.glob("**.jfif")
jpg_dateien = glob.glob("*.jpg")
jpeg_dateien = glob.glob("*.jpeg")
gif_dateien = glob.glob("*.gif")
dateien = jfif_dateien + jpg_dateien + gif_dateien
dateien = list(dateien)
for Bild in dateien:
	Bild = cv2.imread(Bild)
	RGB = []
	for element in Bild:
		RGB.append(element)
	c = {}
	for x in RGB:
		c[x] = RGB[x]
	print(c)
aber statt der Ausgabe bekomme ich nur eine Fehlermeldung:
TypeError: only integer scalar arrays can be converted to a scalar index
Was hat diese Fehlermeldung zu bedeuten?
pywald
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Ich bin mir nicht sicher, aer ich glaube es sollte funktionieren, wenn due diese Zeile:

Code: Alles auswählen

for x in RGB:
		c[x] = RGB[x]
in diese änderst

Code: Alles auswählen

for x in RGB:
		c[x] = x
Die Iterierst ja schon über RGB und musst RGB dann ja nicht nochmal slicen...
EDIT:
Wenn du RGB slicen möchtest, müsstest du: for x in range(RGB) machen
Benutzeravatar
pywald
User
Beiträge: 45
Registriert: Mittwoch 6. Januar 2021, 15:51

Das hatte ich auch schon versucht aber darauf bekomme ich nur die Fehlermeldung:
TypeError: unhashable type: 'numpy.ndarray'
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Eingerückt wird immer mit vier Leerzeichen pro Ebene. Keine Tabs. Variablennamen schreibt man komplett klein.
"dateien" ist schon eine Liste; das noch mal in eine Liste umzuwandeln ist unnötig.
Bild in eine Liste umzuwandeln geht einfacher:

Code: Alles auswählen

rgb = list(bild)
Ist aber eigentlich unnötig, da Du über bild auch gleich iterieren kannst.
Hast du schon einmal geschaut, was in x drin steht?
Was willst du eigentlich in c speichern?
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Du meinst nicht zufällig soetwas in der art?

Code: Alles auswählen

for Bild in dateien:
	bild = cv2.imread(Bild)
	RGB = []
	c = {}
	cnt = 0
	for x in range(len(bild)):
		cnt += 1
		c[cnt] = bild[cnt-1]
	print(c)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@rennnaus: was soll denn das cnt? Du hast doch schon x. Und was soll ein Wörterbuch, wo die Schlüssel nur Indexe sind?
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

@pywald Wie sollte das Ergebnis ungefähr aussehen?
@Sirius, da war ich wohl ein bisschen voreilig
Antworten