在对图像执行处理算法之前,我需要用户点击一个圆圈以使用鼠标创建剪贴蒙版。此掩码将用于删除将导致我的算法失败的图像区域。
我如何允许用户:
拖动ROI(调整图像上的x-y位置)
通过拖动调整ROI的形状(即圆圈的大小)
将来我需要使用一些功能检测来选择ROI,但是现在我真的需要用户能够以一种对他们来说容易的方式定义ROI,
答案 0 :(得分:2)
如果你安装了scikit-image
,你可以使用以下方法进行矩形选择(虽然修改skimage代码来做一个圆圈而不是很难):
import matplotlib.pyplot as plt
from skimage import data
from skimage.viewer.canvastools import RectangleTool
f, ax = plt.subplots()
ax.imshow(data.camera(), interpolation='nearest', cmap='gray')
props = {'facecolor': '#000070',
'edgecolor': 'white',
'alpha': 0.3}
rect_tool = RectangleTool(ax, rect_props=props)
plt.show()
print("Final selection:")
rect_tool.callback_on_enter(rect_tool.extents)
按Enter键完成选择。
答案 1 :(得分:1)
不能再支持Stefan给出的代码片段(当ax传递给RectangleTool时它会失败)。 RectangleTool仅将skimage查看器作为参数。这是一段改编自Stephan示例和skimage documentation的代码。它提供了一种检索ROI坐标的交互方式。
from pylab import *
from skimage import data
from skimage.viewer.canvastools import RectangleTool
from skimage.viewer import ImageViewer
im = data.camera()
def get_rect_coord(extents):
global viewer,coord_list
coord_list.append(extents)
def get_ROI(im):
global viewer,coord_list
selecting=True
while selecting:
viewer = ImageViewer(im)
coord_list = []
rect_tool = RectangleTool(viewer, on_enter=get_rect_coord)
print "Draw your selections, press ENTER to validate one and close the window when you are finished"
viewer.show()
finished=raw_input('Is the selection correct? [y]/n: ')
if finished!='n':
selecting=False
return coord_list
a=get_ROI(im)
print a