2016-05-02 16 views
2

Gibt es eine Möglichkeit zu sagen, ob ein Bild als weißer Hintergrund mit Python und was könnte eine gute Strategie, um einen "Prozentsatz an Vertrauen" über diese Frage zu bekommen? Es scheint, als ob die Literatur im Internet nicht genau diesen Fall behandelt und ich kann nichts genaues finden.Erkennen von weißem Hintergrund auf Bildern mit Python

Bei den Bildern, die ich analysieren möchte, handelt es sich um typische E-Commerce-Produktbilder, daher sollten sie ein einziges fokussiertes Objekt in der Mitte und weißen Hintergrund nur an den Rändern haben.

Eine andere Information, die verfügbar sein könnte, ist der maximale Prozentsatz des Bildraums, den das Objekt einnehmen sollte.

+0

Verwenden Sie OpenCV für jede Bildverarbeitung! – linusg

+0

@linusg Kennen Sie eine bestimmte Strategie mit OpenCV? –

+0

Schauen Sie sich http://pyimageSearch.com für gute Tuts an. Suche einfach danach, du wirst etw. Finden. Das war der Ort, wo ich tiefer in OpenCV ging. – linusg

Antwort

1

ich mit so etwas wie dies gehen würde.

  1. den Kontrast des Bildes reduzieren den hellsten, wie 240 etwas weißeste Pixel, indem statt 255 so, dass die Weiße im Allgemeinen innerhalb des Bildes und innerhalb von Teilen des Produkts sind nicht mehr reinweiß gefunden.

  2. Setzen Sie einen 1 Pixel breiten weißen Rahmen um das Bild - das ist der Floodfill im nächsten Schritt zu ermöglichen „fließen“ der ganzen Weg um den Rand (auch wenn das „Produkt“ die Ränder berührt von der Rahmen) und "sickern" in das Bild von allen Grenzen/Kanten.

  3. Floofdill Ihr Bild beginnt in der oberen linken Ecke (was nach Schritt 2 notwendigerweise rein weiß ist) und erlaubt eine Toleranz von 10-20% bei der Anpassung des Weiß, falls der Hintergrund weiß oder leicht schattiert ist. und das Weiß wird um die Ränder herum in dein Bild fließen, bis es das Produkt in der Mitte erreicht.

  4. Sehen Sie, wie viele reine weiße Pixel Sie jetzt haben - das sind die Hintergrundbilder. Der Prozentsatz an reinen weißen Pixeln gibt Ihnen einen Indikator für das Vertrauen in das Bild, das ein Produkt auf einem weißlichen Hintergrund ist.

ich ImageMagick von der Kommandozeile wie folgt verwenden würde: wird

convert product.jpg +level 5% -bordercolor white -border 1 \ 
    -fill white -fuzz 25% -draw "color 0,0 floodfill" result.jpg 

ich auf Stackoverflow weißen Hintergrund nur so können Sie die Ränder mit einem roten Rand setzen um die folgenden zwei Bilder sehen und zeigen Sie die Vorher-Nachher-Bilder - betrachten Sie die Menge an Weiß in den resultierenden Bildern (es gibt keine in der zweiten, weil es keinen weißen Hintergrund hatte) und auch im Schatten unter dem Router, um die Wirkung der -fuzz zu sehen .

Vor

enter image description here

Nach

enter image description here

Wenn Sie möchten, dass als Prozentsatz, können Sie alle nicht-weißen Pixel schwarz machen und dann den Prozentsatz berechnen von weißen Pixeln wie folgt:

convert product.jpg -level 5%          \ 
    -bordercolor white -border 1         \ 
    -fill white -fuzz 25% -draw "color 0,0 floodfill" -shave 1  \ 
    -fuzz 0 -fill black +opaque white -format "%[fx:int(mean*100)]" info: 
62 

enter image description here

Vor

enter image description here

Nach

enter image description here

ImageMagick hat P onth-Bindungen, so dass Sie das oben genannte in Python tun könnten - oder Sie könnten OpenCV und Python verwenden, um denselben Algorithmus zu implementieren.

+0

Ich werde das ausprobieren. Vielen Dank. –

0

Das beliebteste Bildformat ist .png. PNG-Bild kann eine transparente Farbe (Alpha) haben. Passen Sie häufig mit der weißen Hintergrundseite zusammen. Mit pillow lässt sich leicht herausfinden, welche Pixel transparent sind.

Ein guter Ausgangspunkt:

from PIL import Image 

img = Image.open('image.png') 
img = img.convert("RGBA") 

pixdata = img.load() 

for y in xrange(img.size[1]): 
    for x in xrange(img.size[0]): 
     pixel = pixdata[x, y] 
     if pixel[3] == 255: 
      # tranparent.... 

Oder vielleicht ist es genug, wenn Sie überprüfen, ob oben links Pixel ist es weiß:

pixel = pixdata[0, 0] 
if item[0] == 255 and item[1] == 255 and item[2] == 255: 
    # it's white 
+0

Dies ist eine Annahme, die ich nicht machen kann. Ich muss davon ausgehen, dass JPEGs oder generell Bilder mit solidem Hintergrund verwendet werden. –

Verwandte Themen