2017-07-26 7 views
0

Ich habe ein grundlegendes Problem: Ich kann nicht mehrere Dateien in einem Ordner löschen. Wie Sie unten sehen können, mache ich zuerst einige Überprüfungen (gib src, überprüfe, ob die Datei existiert, drucke Breite und Höhe und dann den Pixelbereich).Löschen mehrerer Bilder (os.remove) mit Python

Ich möchte alle JPG-Dateien löschen, die den gegebenen Pixelbereich kleiner als einen Wert haben, den ich gebe. Der Code wird ausgeführt, keine Fehler, aber die Datei ist immer noch da. Mit einer einzigen Datei (also mit vollem Pfad angegeben ..) funktioniert es, mit mehreren (wie in meiner Frage) nicht.

import numpy as np 
import cv2 
import os 
from datetime import datetime 

now = datetime.now() 
id_folder = now.strftime('%Y%m%d-%H%M%S-%f') 

src = ('C:\\Users\\User\\Desktop\\folder\\folder1\\area1\\') 
files = os.listdir(src) 

img = cv2.imread(src + str(files[0]), 0) 
print(img) 
height = np.size(img, 0) 
width = np.size(img, 1) 
print(height, width) 

pixel_area = height*width 
print(pixel_area) 

for image_file_name in os.listdir('C:\\Users\\User\\Desktop\\folder\\folder1\\area1\\'): 
    if image_file_name.endswith(".jpg") and pixel_area <= 140: 
     os.remove('C:\\Users\\User\\Desktop\\folder\\folder1\\area1\\' + image_file_name) 

Im Ordner befinden sich mehrere Bilder mit unterschiedlichen Bereichen. Was ich möchte, ist nur einige von ihnen zu löschen, nur das, was eine niedrigere Breite * Höhe als ein Wert, den ich gebe. Hier

ist ein Beispiel

example

Ich mag die Bilder in dem roten Rechteck löschen und dass in grün zu halten, gerade wegen ihrer Pixelfläche (kann ich sagen, Seitenverhältnis?) Ist größer.

+0

Sind Sie sicher, dass Sie den Pixelbereich nicht für jede Datei überprüfen möchten? Ihr aktueller Code behandelt nur die erste Datei, und der 'pixel_area' bleibt für alle Dateien unabhängig vom Dateinamen konstant. –

+0

Ihr Code betrachtet die Bilder nicht, um ihre Größe zu ermitteln. Für alle Bilder wird der gleiche Wert verwendet. Sie müssen jede Datei öffnen, um ihre Größe zu bestimmen. – holdenweb

+0

Sie richtig Leute. Ich habe vergessen zu sagen (jetzt aktualisieren ...), dass in dem Ordner mehrere Bilder mit verschiedenen Bereichen sind. Was ich möchte, ist nur einige von ihnen zu löschen, nur das, was eine niedrigere Breite * Höhe als ein Wert, den ich gebe. – Link

Antwort

2

Dies könnte Sie näher bringen. Ich habe die unten stehenden Kommentare hinzugefügt, um die von mir vorgeschlagenen Änderungen zu identifizieren.

Es ist nicht notwendig, die Zeichenfolge in Klammern zu setzen. An jeder Stelle, an der Sie dieselbe Zeichenfolge hatten, ersetzte ich sie durch den Variablennamen src.

src = 'C:\\Users\\User\\Desktop\\folder\\folder1\\area1\\' 
files = os.listdir(src) 

zog ich Ihr Bild Sizing-Code in die for Schleife, so dass sie jedes Bild prüfen wird und die Größe dann das Bild.

for image_file_name in os.listdir(src): 
    img = cv2.imread(src + image_file_name, 0) 
    print(img) 
    height = np.size(img, 0) 
    width = np.size(img, 1) 
    print(height, width) 

    pixel_area = height * width 
    print(pixel_area) 

    if image_file_name.endswith(".jpg") and pixel_area <= 140: 
     os.remove(src + image_file_name) 
+0

Du bist der Mann! Es funktionierte. Gute kommentierte Antwort und gute Lösung. Vielen Dank. P.S Sie verwendet Arduino, um die ARC in das T-Shirt zu machen? – Link

Verwandte Themen