微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pyhton 不更新全局列表 - RectangleSelector

如何解决Pyhton 不更新全局列表 - RectangleSelector

我正在尝试在处理后的 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',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 已正确附加。见下图。

Click list with append

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

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

见下图:

Click list with click[:] = x1,y1

感觉有点卡住了,我也试过在def line_select_callback(eclick,erelease):之后定义x1,y2为全局变量

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

提前感谢任何想提供帮助的人

安德里亚

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。