Python GUI 在图像中“标记”真实情况?

问题描述

正在进行一个项目涉及在图像中查找对象的 x,y 坐标。对于给定的图像,我想通过视觉检查增加对特定 x,y 的注释。

作为一个玩具示例,我有一个星星的图像。从这张图片中,我推导出一组 x,y 恒星质心坐标,使用 skimage.peak_local_max 找到:

centroids = [[3.567,4.325],[7.814,6.769],[2.122,9.177],...]

enter image description here

它可以叠加在原始图像上。我想要的是一个用户友好的界面,允许对数据进行注释。比如说,通过单击鼠标(“绿色框”)选择最上面的星星,这样我的元数据就会被增强为:

    x    y    selected
0   3.567         4.325         False
1   7.814         6.769         True
2   2.122         9.177         False
...

... 在移动到下一张图片之前(使用它自己的一组要叠加和选择的质心)。

我的问题实际上并不是关于在图像上“叠加”注释,而是注释数据。这些从上下文中提取的关键字的汇合使得搜索答案变得非常困难。通过目视检查来注释我的数据要容易得多,而不是用数字检查每个坐标。有没有一种使用通用 Python 库的快速而肮脏的方法来做到这一点?

解决方法

我看到过在 Python 中使用 Matplotlibeasygui 完成的类似操作。

您可以使用 easygui 创建点击触发器:

    def double_click_trigger(page_num,event):
        if event.dblclick:
            x = int(event.xdata)
            y = int(event.ydata)
            print(f"Clicked at {x},{y}")

然后创建一个 matplotlib 图并将触发器连接到它:

        im = some_image ...
        fig,ax = plt.subplots()
        ax.imshow(im.resize(size))

        def this_page_trigger(event):
            return double_click_trigger(i,event)

        ax.set_title(f'Page {i + 1} (double click coordinates)')
        fig.canvas.mpl_connect('button_press_event',this_page_trigger)
        plt.show()

然后您可以将 x/y 写出到 JSON 或其他格式的文件中。