【问题标题】:Image segmentation based on mouse click基于鼠标点击的图像分割
【发布时间】:2023-04-01 01:51:01
【问题描述】:

使用 python 框架,我们能够创建图像片段,如附件所示。现在,基于鼠标点击图像片段,我们需要用特定颜色突出显示片段。

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

以下是sn-p的代码:

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 image-processing


    【解决方案1】:

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

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

    【讨论】:

    • 下面是click方法中添加的代码: clicked_segment = segments[event.xdata, event.ydata]
      image[clicked_segment ] = color mark_boundaries(image, segments) fig .canvas.draw() fig.canvas.update() fig.canvas.flush_events()
      但是在所需的段中颜色仍然没有更新。请建议
    • 我的 matplotlib 版本:1.5.3 和 Python 版本 3.5.2
    • 我想我应该提到这一点:clicked_segment 是一个标量值,对应于segments 矩阵中的标记区域。设置颜色时仍然需要使用逻辑数组索引。 image[segments==clicked_segment]=color
    • 我尝试使用更新的代码,但问题仍然存在。你可以发送完整的代码吗? code image[segments == 10] = color 在 click 方法之外完美运行
    • 我没有完整的代码,也不知道如何修复你的点击方式。但是,如果您想检查坐标属于哪个段(正如您在问题中所说),您可以使用clicked_segment = segments[x, y] 获得。您可能需要检查以确保您的鼠标坐标实际上与图像坐标对齐。
    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 2013-08-28
    • 2017-08-05
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多