使用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()
答案 0 :(得分:0)
根据the documentation,quickshift
返回一个指示段标签的整数掩码。如果您知道用户点击了哪个像素,则可以检查变量segments
中该像素的值,以获取细分数。
在您单击处理程序中,您可以使用
clicked_segment = segments[event.xdata, event.ydata]