Gebruik Imagemagick om gebieden met dezelfde kleur te vinden

Is er een manier om ImageMagick (of iets dergelijks, alles dat werkt?) Te gebruiken om delen van een afbeelding te vinden waar de pixels naast elkaar dezelfde kleuren hebben?

Bij voorbaat dank,

1
Wat is de context van de vraag? U kunt zeker een beeldverwerkingstoepassing (Gimp, PS, enz.) Gebruiken om een ​​pixel met de muis te selecteren en de selectie uit te breiden naar aaneengesloten gebieden met dezelfde kleur. Maar wat verwacht u in de context van een toepassing terug te laten keren naar de beller nadat een functie "delen van een afbeelding heeft gevonden"?
toegevoegd de auteur Dave, de bron

1 antwoord

Photoshop, Gimp en nog veel andere beeldprocessors zullen dit voor u doen. Programmatisch, hier is een code in Python die dit doet:

from PIL import Image, ImageDraw

def inImage(im, px):
    x,y = px
    return x < im.size[0] and y < im.size[1] and x > 0 and y > 0

def meetsThreshold(im, px, st, threshold):
    color = im.getpixel(px)
    similar = im.getpixel(st)
    for cPortion, sPortion in zip(color,similar):
        if abs(cPortion - sPortion) > threshold:
            return False
    return True

def floodFill(im, fillaroundme, fillWith, meetsThresholdFunction):
    imflooded = im.copy()
    imflooded.putpixel(fillaroundme, fillwith)
    processed = []
    toProcess = [fillaroundme]
    while len(toProcess) > 0:
        edge = toProcess.pop()
        processed.append(edge)
        x, y = edge
        for checkMe in ((x+1, y), (x-1, y), (x, y+1), (x, y-1)):
            if inImage(im, checkMe) and meetsThresholdFunction(im, edge, checkMe):
                imflooded.putpixel(checkMe, fillWith)            
                if checkMe not in toProcess and checkMe not in processed:
                    toProcess.append(checkMe)
        processed.append(edge)
    return imflooded


im = Image.open(r"tardis.jpg")
filled = floodFill(im, (120, 220), (255, 0, 0), lambda im, px, st: meetsThreshold(im, px, st, 10))

filled.show()

I got the tardis.jpg from here

1
toegevoegd