WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Ordner voller Bilder einlesen, schneiden und speichern?

 

Luebbi310
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2014, 23:40     Titel: Ordner voller Bilder einlesen, schneiden und speichern?
  Antworten mit Zitat      
Servus Leute, habe gerade angefangen mit MatLab zu arbeiten und hoffe Ihr könnt mir hier weiter helfen.

Ich habe einen Ordner mit 75 Bildern, diesen Ordner möchte ich komplett einlesen, danach die Bilder alle schneiden da am oben Rand ein Teil ist den ich nicht gebrauchen kann, und anschließend geschnitten speichern.

Ich bin jetzt soweit das ich die Bilder einlesen kann und daraus eine 75x1 struct habe, des weiteren habe ich den Teil der mir das Bild schneiden soll zumindest legt es mir einen Rahmen darum. Aber ich weiß nicht wie ich jetzt das imread aufbaue das er das bei allen bildern macht und dann speichert ??

Vielen Dank im Voraus für eure Tipps und Hilfen




Das hab ich bisher, im Anhang noch eins der Fotos


clear all

z= dir ('D:\Documents\MATLAB\Bilder_Schiessen_Luebke\*JPG');


X=imread(???);
image(X);
hold on;
x=[0 5184 5184 0];
y=[3456 3456 840 840];
plot([x x (1)],[y y (1)], 'm-x' );

IMG_4713.JPG
 Beschreibung:

Download
 Dateiname:  IMG_4713.JPG
 Dateigröße:  5.2 MB
 Heruntergeladen:  663 mal
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.05.2014, 06:51     Titel:
  Antworten mit Zitat      
unter z.name findest du alle dateinamen.
die kannst du dann einfach mit einer forschleife durchgehen.

so irgendwie
Code:

z= dir ('D:\Documents\MATLAB\Bilder_Schiessen_Luebke\*JPG');
for k=1:numel(z)
X=imread(z(k).name)
end
 

wie man mehrere dateien in einem order lädt wurde aber schonmal im forum besprochen. das findest du bestimmt.
auch die bilder dann zu speicher sollte gehen
Code:
usw.
kleine anmerkung noch.
Code:
am anfang sollte man sich spaaren. das macht das debuggen unmöglich.
des weiteren: bitte die code umgebung verwenden wenn du code postest
grüße winkow
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 06.05.2014, 07:00     Titel:
  Antworten mit Zitat      
1. Alle Dateien aus bestimmten Ordner mit bst. Typ einlesen:
Code:


2. Speichern
Wenn du die liste der einzulesenden Files hast, würde ich diese über eine Schleife alle einlesen und in einer Struct fortlaufend speichern.

3. beschneiden des Bildes
Das einzelne eingelesene Bild sollte möglichst eine Matrix und kein Struct ergeben. Diese Matrix läßt sich mit Matrixoperationen normal beschneiden.
(Derzeit plottest du nur einen Rahmen in die Grafik.)
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Luebbi310
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2014, 11:10     Titel:
  Antworten mit Zitat      
Erstmal danke für die Antworten,

Ich versuche mich ja auch schon selbst dran aber Informatik ist echt nicht mein Ding. Aber ich benötige das Prog für eine Auswertung.
Habe es jetzt mal so Probiert und ran geschrieben was passiert.



Code:
z= dir ('D:\Documents\MATLAB\Bilder_Schiessen_Luebke\*JPG'); % gibt eine 75X1 struct

for k=1:numel(z)
    X=imread(z(k).name); % gibt eine 3456X5184X3 uint8 dort steht das er es nicht anzeigen kann weil es über 500000Elemente sind (75 fotos)
end

for i=1:numel(z)
    Y=imwrite(z(i).name); % Fehlermeldung : too many Output arguments
end



Wie bekomme ich denn jetzt in irgendeiner Weise Zugriff so das er alle Bilder als Matrix liest und mit Fest vorgegebenen Koordinaten schneidet und anschließend geschnitten wieder speichert?

Hoffe Ihr könnt mir weiter helfen bin hier echt augeschmissen
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.05.2014, 11:22     Titel:
  Antworten mit Zitat      
Zitat:
Wie bekomme ich denn jetzt in irgendeiner Weise Zugriff so das er alle Bilder als Matrix liest

hast du doch schon
mit
Code:
for k=1:numel(z)
    X=imread(z(k).name);
end

X ist jeweils die matrix mit dem bild.

und wenn du deine bilder beschneiden willst must du halt nur den bereich nehmen den du willst.
Code:
x(1:100,1:100,:)
zb ist dann nur die ecke oben von 1-100
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Luebbi310
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2014, 11:30     Titel:
  Antworten mit Zitat      
aber X ist nur eine einzige Matrix und nicht eine pro Bild oder?Wenn ich mir die Variable anschaue im workspace kommt die Fehlermeldung: Cannot display summaries of variables with more than 524288 elements.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.05.2014, 12:39     Titel:
  Antworten mit Zitat      
das siht so aus als würden dir viele grundlagen fehlen in matlab Smile ich kann dir nur empfeheln die getting started durchzugehen Smile
also in X ist jeweils nur ein bild gespeichert das ist richtig. nämlich das, welches im schleifendurchlauf grade aktuell ist. wenn du alle gerne im workspace haben willst gleichzeitig kannst du aus dem X zb ein cell array machen.
Code:
for k=1:numel(z)
    X{k}=imread(z(k).name);
end
 

das hat sich aber bei dir nicht so angehört als wäre das nötig.
das du dir die matrix nicht im workspace angucken kannst liegt nunmal daran das es zu viele werte sind um sie in der vorschau darzustellen. was aber ja auch sinn macht. was willst du denn dir bei den 500k zahlen angucken ^^
ob oben links ne 3 steht? Wink
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Luebbi310
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2014, 14:00     Titel:
  Antworten mit Zitat      
Ja mir fehlen so ziemlich alle Grundlagen:( desshalb versuch ich mich anhand des Forums und Help usw. durch zu hangeln.

Code:

z= dir ('D:\Documents\MATLAB\Bilder_Schiessen_Luebke\*JPG');

for k=1:numel(z)
    X{k}=imread(z(k).name);
   
    image X{k}(840:3456,1:5184,:)
   
end
 


Wenn ich das jetzt soweit habe zeigt er mir ja immer nur das letzte bild an wie schaff ich es denn jetzt noch das er einfach während dem Durchlauf alle Bilder so schneidet und sofort abspeichert? Das ich am Ende alle Bilder zurechtgeshcnitten wieder aufrufen könnte
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.05.2014, 14:16     Titel:
  Antworten mit Zitat      
was funktioniert denn mit imwrite nicht? hast du dir mal die docu dazu angeguckt ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Luebbi310
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2014, 15:52     Titel:
  Antworten mit Zitat      
Code:
z= dir ('D:\Documents\MATLAB\Bilder_Schiessen_Luebke\*JPG');

for k=1:numel(z)
   
    X{k}=imread(z(k).name);
   
    image (X{k}(840:3456,1:5184,:))
   
    imwrite(X{k},'Bild_geschnitten.jpg')
end
 


mein Problem damit ist eigentlich nur noch das er nur ein Bild speichert und nicht alle 75, könntest du bitte den Code gerade ergänzen das das funktioniert. Oder mir bitte genau sagen was ich ändern muss ich dreh hier bald durch.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.05.2014, 16:13     Titel:
  Antworten mit Zitat      
naja du überspeicherst ja immer das selbe bild Smile
Code:
z= dir ('D:\Documents\MATLAB\Bilder_Schiessen_Luebke\*JPG');

for k=1:numel(z)
   
    X{k}=imread(z(k).name);
   
    image (X{k}(840:3456,1:5184,:))
   
    imwrite(X{k}(840:3456,1:5184,:),['Bild_geschnitten',num2str(k),'.jpg'])
end

wäre zb eine möglichkeit denke ich Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.