【发布时间】:2019-01-27 20:03:54
【问题描述】:
我遇到了skimage.viewer.canvastools.RectangleTool() 的问题,如果能提供任何帮助,我将不胜感激。
我希望选择框是交互式的,即在绘制之后,可以使用手柄编辑所选区域。此功能appears to work 与matplotlib.widgets.RectangleSelector()...例如
from matplotlib.widgets import RectangleSelector
from pylab import *
def onselect(eclick, erelease):
'Dummy function'
x = arange(100)/(99.0)
y = sin(x)
fig = figure
ax = subplot(111)
ax.plot(x,y)
test = RectangleSelector(ax, onselect,
drawtype='box',
interactive=True)
show()
但是,当我使用skimage.viewer.canvastools.RectangleTool()时
rect_tool = RectangleTool(viewer,
on_enter=save_region,
interactive=True)
我被扔了:
TypeError: init() 得到了一个意外的关键字参数 'interactive'
...如果我使用
rect_tool = RectangleTool(viewer,
on_enter=save_region,
rect_props=dict(interactive=True))
我遇到了这个错误:
AttributeError:未知属性交互
我误解了manpage吗?
非常感谢!
这就是我所在的位置(RectangleTool 不是交互式的):
import skimage.io
from skimage.viewer import ImageViewer
from skimage.viewer.canvastools import RectangleTool
import numpy as np
from tkinter import Tk
from tkinter.filedialog import askopenfilename
from tkinter.simpledialog import askfloat
Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename)
image_rgb = skimage.io.imread(filename)
image_r = image_rgb[:,:,0] # extract red channel
########
# Does this need to be initialised differently to make the rectangle interactive?
viewer = ImageViewer(image_r)
intensity_dumps = [] # used to store pixel values for selected regions
def save_region(extents):
global image_r, intensity_dumps
xmin = np.floor(extents[0]).astype('uint16')
xmax = np.ceil(extents[1]).astype('uint16')
ymin = np.floor(extents[2]).astype('uint16')
ymax = np.ceil(extents[3]).astype('uint16')
region = image_r[ymin:ymax,xmin:xmax]
intensity_dumps.append(np.ndarray.flatten(region))
print('Mean:',np.mean(region))
print('Std. dev.:',np.std(region))
print('Max:',np.max(region))
########
# Here is where I believe the problem lies...
rect_tool = RectangleTool(viewer,
on_enter=save_region)
thresholded = viewer.show()[0][0]
【问题讨论】:
标签: python image-processing interactive scikit-image viewer