Ordner mit Bilddateien auslesen

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
fisel_b90
User
Beiträge: 6
Registriert: Mittwoch 14. Juni 2017, 14:32

Hallihallo,

ich hoffe ihr könnt mir bei einem Problem helfen. Ich habe einen Ordner den ich gern mit Python zwecks Template Matching auslesen möchte.
In dem Ordner befinden sich Bilddateien (insgesamt 8 im TIFF-Format). Wie kann ich den Ordner inkl. Bildern auslesen mit Python? Kann mir
da jemand helfen?

Mein bisheriger Quellcode sieht wie folgt aus:

Code: Alles auswählen

import cv2
import numpy as np
import skimage.io as skio
from matplotlib import pyplot as plt
img_rgb = cv2.imread('20170621_092127_0f28/beispiel.jpg')
print img_rgb.shape[0:2]
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('20170621_092127_0f28/template2.jpg',0)
w, h = template.shape[0:2]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv2.imwrite('neu.jpg',img_rgb)
In dem Quellcode ist jetzt nur eine Bilddatei sowie ein Template eingelesen. Das funktioniert auch dann soweit. Hatte überlegt ob das vielleicht über eine for-Schleife funktioniert...?
Zuletzt geändert von Anonymous am Donnerstag 6. Juli 2017, 15:13, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja - wenn man Dinge mehrmals machen moechte, muss man eine Schleife verwenden. Und wenn man mit Dateien arbeiten moechte, dann bietet sich das os-Modul an, zB mit der Funktion os.listdir(). Oder das glob-Modul.
BlackJack

@fisel_b90: Das klingt nach einer ``for``-Schleife und dem `glob`-Modul.
fisel_b90
User
Beiträge: 6
Registriert: Mittwoch 14. Juni 2017, 14:32

Okay dann werde ich mich da mal durchlesen müssen. Hatte jetzt mal nebenbei mich kurz damit hier beschäftigt:

Code: Alles auswählen

import os
a ="Pfad des Ordners"
os.listdir(a)
Dann sollte er mir doch den Inhalt des Ordners anzeigen oder? Weil da tut sich gar nichts bei mir :( Bin jetzt aber auch kein Python-Profi...
Muss ich dabei noch auf etwas anderes achten?
Zuletzt geändert von Anonymous am Donnerstag 6. Juli 2017, 15:40, insgesamt 2-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und noch eine inhaltliche Anmerkung: es ist unueblich einen festen Schwellenwert fuer Template Matching zu verwenden. Stattdessen sucht man sich den Punkt der groessten/kleinsten Uebereinstimmung raus mit cv2.minMaxLoc. Welche dann die richtige ist haengt vom verwandten Verfahren zur Uebereinstimmungsbestimmung ab.

http://docs.opencv.org/2.4/modules/core ... .minMaxLoc
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du sagst nicht, wie du das ausfuehrst. Wenn du das einfach in dein Skript geschrieben hast, dann produziert das natuerlich keine Ausgabe. Oder wozu sind deine prints sonst im Skript?
fisel_b90
User
Beiträge: 6
Registriert: Mittwoch 14. Juni 2017, 14:32

Gilt das mit "cv2.minMaxLoc" auch für Template Matching mit mehreren Templates, die eingebunden werden...?
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Natuerlich.
fisel_b90
User
Beiträge: 6
Registriert: Mittwoch 14. Juni 2017, 14:32

Hm okay. Danke.
Antworten