0

我正在尝试在处理后的 TIFF 图像上绘制一个正方形感兴趣区域并获取矩形的坐标。

为此,我编写了以下代码:


click = [0,0]
release = [0,0]

def line_select_callback(eclick, erelease):  
    
    x1 = eclick.xdata
    y1 = eclick.ydata
    x2 = erelease.xdata
    y2 = erelease.ydata
    print(x1, x2, y1, y2)
    click.append(x1)
    a =len (click)
    print ("the lenght of click list is",a )
    #click[:] = x1, y1
    #release[:] = x2, y2
     
def toggle_selector(event):
   
    print(' Key pressed.')
    if event.key == 't':
        if toggle_selector.RS.active:
            print(' RectangleSelector deactivated.')
            toggle_selector.RS.set_active(False)
        else:
            print(' RectangleSelector activated.')
            toggle_selector.RS.set_active(True)


#fig = plt.figure('Image filtered and normalized')
fig, ax = plt.subplots()

#cursor = Cursor(ax, useblit=True, color='blue', linewidth=2 )
plt.imshow(im_filt_norm, cmap=plt.cm.rainbow)
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
plt.title('Image filtered and normalized', fontsize=25)


# drawtype is 'box' or 'line' or 'none'
toggle_selector.RS = RectangleSelector(ax, line_select_callback,
                                       drawtype='box', useblit=True,
                                       button=[1, 3],  # disable middle button
                                       minspanx=5, minspany=5,
                                       spancoords='pixels',
                                       interactive=True, rectprops = dict(facecolor='black', edgecolor = 'black', alpha=0.8, fill=True))
fig.canvas.mpl_connect('key_press_event', toggle_selector)
plt.show()
plt.colorbar()

start_roi = np.array (click) 
b = len (start_roi)
print ("the lenght of start_roi is", b )

print ("this is start_ROI", start_roi)

主要是我定义了一个名为Click的全局列表,由两个零组成,并且我希望通过附加的 x1 对其进行更新。代码还没有完成,因为我正在排除故障。

使用 append 会产生一个奇怪的结果:Spyder 看到 size = 2 ,但打开它我发现了三列,所以看起来 x1 被正确附加了。见下图。

单击带有附加的列表

当我将列表转换为数组时,大小再次为 2 ,并且由两个零组成,如line_select_callback定义的那样。

using :click[:] = x1, y1也不起作用,给出一个由两个零组成的列表,但实际上如果我在 IDE 控制台中打开它,我可以看到从矩形选择器中获取的实际值。

见下图:

带有 click[:] = x1, y1 的点击列表

感觉有点卡住了,我也试过把x1、x2、y1和y2定义为全局变量,就在后面def line_select_callback(eclick, erelease):

但在这种情况下,我也无法从函数中找到它们。

提前感谢任何想要帮助的人,

安德烈亚

4

0 回答 0