1

我在 Spyder 环境中使用 Ipython 解释器。我想编写一个脚本来裁剪文件夹中相同尺寸的所有图像。我使用 Matplotlib 绘制 *.jpg 图像。我希望能够使用鼠标指向图片上对应于新图片左上角和右下角的两个角。

我写了这样的代码

import os
import scipy.ndimage as nd
import matplotlib.pyplot as plt

plt.close('all')

class Conoscopia:
    def __init__(self, cono, nome):
        self.x1 = 0.0
        self.y1 = 0.0
        self.x2 = 0.0
        self.y2 = 0.0
        self.cono = cono
        self.nome = nome

    def connect(self):
        self.cid = self.cono.canvas.mpl_connect('button_press_event', self.onclick)

    def onclick(self, event):
        if self.x1==0.0 and self.y1==0.0:
            self.x1=event.xdata
            self.y1=event.ydata
            print "x1 = ", event.xdata, " y1 = ", event.xdata
        elif self.x2==0.0 and self.y2==0.0:
            self.x2=event.xdata
            self.y2=event.ydata
            print "x2 = ", event.xdata, " y2 = ", event.xdata     

    def return_coo(self):
        return self.x1, self.x2, self.y1, self.y2

    def disegna(self):
        plt.imshow(self.nome)
        plt.show()       

plt.ioff()

files = os.listdir(os.getcwd())

lista_nomi=[]
for nome in files:
    if nome[len(nome)-4:len(nome)] == '.JPG' or nome[len(nome)-4:len(nome)] == '.jpg':
        lista_nomi.append(nome)

foto = nd.imread(lista_nomi[0])

id_f = plt.figure()

cn = Conoscopia(id_f, foto)
cn.connect()
cn.disegna()

x1, y1, x2, y2 = cn.return_coo()

我的问题是整个代码一次运行,最后 x1、y1、x2 和 y2 的值​​对应于初始化值。然后我可以单击图片以获取四个值,如果我在解释器中运行x1, y1, x2, y2 = cn.return_coo()它们包含正确的值。但是我能做些什么来直接在我的代码中检索它们并能够使用它们呢?我最理想的是,一旦完成两次点击,窗口就会关闭,我可以在余下的编程中使用坐标 (x1, y1) 和 (x2, y2)。

我试图在函数上添加一些额外的等待循环或循环,return_coo()直到坐标与初始化值不同,但这会阻塞我的计算机,我永远不会显示图片。

谢谢!

4

0 回答 0