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()
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 –
meine Matplotlib Version: 1.5.3 und Python Version 3.5.2 –
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' –