Түсті ұқсас аймақтарды табу үшін Imagemagick пайдаланыңыз

ImageMagick (немесе ұқсас нәрсе, ол жұмыс істейтін кез-келген!), Бір-бірінің жанында орналасқан пикселдер ұқсас түстер болып табылатын кескін аймақтарын табудың қандай да бір тәсілі бар ма?

Алдын-ала рақмет,

1
Сұрақтың мазмұны қандай? Сіз, әрине, суретті өңдеу қосымшасын (Gimp, PS, т.б.) тінтуірмен пиксельді таңдау және ұқсас түстердің іргелес аумақтарын кеңейту үшін пайдалана аласыз. Бірақ өтінім контексінде, қоңырау шалушыға «сурет салатын жерлерді» тапқаннан кейін не қайтарады деп күтесіз?
қосылды автор Dave, көзі

1 жауаптар

Photoshop, Gimp және Plenty басқа кескін процессорлары сіз үшін мұны жасайды. Бағдарламалық түрде мына жерде питонның кейбір коды бар:

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
қосылды