在matplotlibp中压缩鼠标到画布区域

2024-06-16 19:03:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写我自己的裁剪函数,这样我就可以从更大的图像中选择一个区域,然后对其执行其他操作。我使用matplotlib来导入和显示图像:self.img=plt.imread("someimage.png")

如果我待在画布区域,效果很好: 在

 def __onclick__(self, event):

    self.point=[]
    if event.xdata is not None:
        xholder=event.xdata
    else:
        xholder = 0
    if event.ydata is not None:
        yholder = event.ydata
    else:
        yholder = 0 
    self.point.append([int(xholder),int(yholder)])
def __onrelease__(self,event):
    if event.xdata is not None:
        xholder=event.xdata
    else:
        xholder = self.img.shape[0]
    if event.ydata is not None:
        yholder = event.ydata
    else:
        yholder = self.img.shape[1]
    self.point.append([int(xholder),int(yholder)])
    self.plotcanvas.axes.imshow(self.img[self.point[0][1]:self.point[1][1],self.point[0][0]:self.point[1][0]])
    self.plotcanvas.draw()

但是一旦我超出画布边界event.xdata和{}就会返回(None,None)。在画布区域中注册鼠标单击后,是否有任何方法将鼠标移动限制在画布区域内?在

使用允许导入.png文件然后进行裁剪的代码进行编辑

^{pr2}$

这是在剔除了所有不必要的东西之后,仍然制作了一个功能程序,可以让你导入一个.png文件,然后从中挤出一个区域。我确信Ed Smith提出的矩形选择器可能会起作用,但是我很难让示例代码正常工作,并且对这些值的存储位置以及eclick和erelease如何与其他事件处理程序一起工作感到困惑。恐怕我对matplotlib和python不是很精通。在


Tags: selfnoneevent区域imgifis画布
1条回答
网友
1楼 · 发布于 2024-06-16 19:03:50

框选择器matplotlib widget可能是最简单的方法。您可以将代码与您的图像一起使用:

from matplotlib.widgets import  RectangleSelector
from pylab import *

def onselect(eclick, erelease):
  'eclick and erelease are matplotlib events at press and release'
  print ' startposition : (%f, %f)' % (eclick.xdata, eclick.ydata)
  print ' endposition   : (%f, %f)' % (erelease.xdata, erelease.ydata)
  print ' used button   : ', eclick.button

def toggle_selector(event):
    print ' Key pressed.'
    if event.key in ['Q', 'q'] and toggle_selector.RS.active:
        print ' RectangleSelector deactivated.'
        toggle_selector.RS.set_active(False)
    if event.key in ['A', 'a'] and not toggle_selector.RS.active:
        print ' RectangleSelector activated.'
        toggle_selector.RS.set_active(True)

fig = figure
ax = subplot(111)

A = np.random.random((30,30))
ax.imshow(A)
toggle_selector.RS = RectangleSelector(ax, onselect, drawtype='box')
connect('key_press_event', toggle_selector)
show()

虽然鼠标不局限于方框,但当minspanxminspany是{}时,默认行为是将返回的坐标限制在框中。我不认为你可以轻易地将鼠标移动限制在画布上。在

相关问题 更多 >