基于鼠标点击的图像分割

时间:2017-03-31 17:57:44

标签: image image-processing

使用python框架,我们可以创建图像片段,如附件中所示。现在,基于图像片段中的鼠标单击,我们需要突出显示具有特定颜色的片段。

根据鼠标点击,我可以获得特定位置的x / y坐标。请建议我如何查看坐标属于哪个图像片段?

以下是代码段:

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

1 个答案:

答案 0 :(得分:0)

根据the documentationquickshift返回一个指示段标签的整数掩码。如果您知道用户点击了哪个像素,则可以检查变量segments中该像素的值,以获取细分数。

在您单击处理程序中,您可以使用 clicked_segment = segments[event.xdata, event.ydata]