2017-03-31 3 views
0

Mit Python Framework können wir Bildsegmente wie im Anhang gezeigt erstellen. Jetzt müssen wir basierend auf dem Mausklick im Bildsegment das Segment mit einer bestimmten Farbe markieren.Bildsegmentierung basierend auf Mausklick

Basierend auf dem Mausklick kann ich X/Y-Koordinaten des bestimmten Ortes erhalten. Bitte schlagen Sie mir vor, wie ich überprüfen kann, zu welchem ​​Bildsegment die Koordinaten gehören?

Das Folgende ist das Codefragment:

from skimage.segmentation import felzenszwalb, slic,quickshift 
from skimage.segmentation import mark_boundaries 
from skimage.segmentation import find_boundaries 
from skimage.util import img_as_float 
from skimage import io 

import matplotlib.pyplot as plt 

from skimage import measure 
from skimage import restoration 
from skimage import img_as_float 

import numpy as np 

coords = [] 

def find_nearest(array,value): 

    idx = (np.abs(array-value)).argmin() 

    return array[idx] 

def onclick(event): 

    global ix, iy 

    ix, iy = event.xdata, event.ydata 

    print ('ix ',ix) 

    print ("iy ",iy) 

    color = np.float64([1,0,1]) # red color 

    image[segments == 14] = color 

    mark_boundaries(image, segments) 

    ax.imshow(mark_boundaries(image, segments)) 

    coords.append((ix, iy)) 

    return 

image=img_as_float(io.imread("amazon.jpg")) 

segments = quickshift(image, ratio=1.0, kernel_size=20, max_dist=10, 
      return_tree=False, sigma=0, convert2lab=True, random_seed=42) 

fig = plt.figure("Superpixels -- %d segments" % (500)) 

ax = fig.add_subplot(1, 1, 1) 

fig,ax = plt.subplots() 

color = np.float64([1,0,0]) 

image[segments == 14] = color # desired segment to be colored 

fig.canvas.mpl_connect('button_press_event', onclick) 

ax.imshow(mark_boundaries(image, segments)) 

plt.axis("off") 

plt.show() 

image attached

Antwort

0

Nach the documentation, quickshift gibt eine Ganzzahl angibt Maske Segment Etiketten. Wenn Sie wissen, auf welchen Pixel der Benutzer geklickt hat, können Sie den Wert dieses Pixels in Ihrer Variablen segments überprüfen, um die Segmentnummer zu erhalten.

In Ihrem Handler klicken Sie clicked_segment = segments[event.xdata, event.ydata]

+0

Die folgende verwenden können, ist der Code in Click-Methode hinzugefügt: ** clicked_segment = Segmente [event.xdata, event.ydata]
Bild [clicked_segment] = Farbe mark_boundaries (Bild, Segmente) fig.canvas.draw() fig.canvas.update() fig.canvas.flush_events() ** Aber immer noch wird die Farbe im gewünschten Segment nicht aktualisiert. Pls sugget –

+0

meine Matplotlib Version: 1.5.3 und Python Version 3.5.2 –

+0

Ich denke, ich hätte dies erwähnt: 'clicked_segment' ist ein Skalarwert, der der markierten Region in der' segments'-Matrix entspricht. Wenn Sie die Farbe festlegen, müssen Sie weiterhin die Indexierung des logischen Arrays verwenden. 'image [segments == clicked_segment] = color' –

Verwandte Themen