问题描述
我正在进行的一个项目涉及在图像中查找对象的 x,y
坐标。对于给定的图像,我想通过视觉检查来增加对特定 x,y
的注释。
作为一个玩具示例,我有一个星星的图像。从这张图片中,我推导出一组 x,y
恒星质心坐标,使用 skimage.peak_local_max
找到:
centroids = [[3.567,4.325],[7.814,6.769],[2.122,9.177],...]
它可以叠加在原始图像上。我想要的是一个用户友好的界面,允许对数据进行注释。比如说,通过单击鼠标(“绿色框”)选择最上面的星星,这样我的元数据就会被增强为:
x y selected
0 3.567 4.325 False
1 7.814 6.769 True
2 2.122 9.177 False
...
... 在移动到下一张图片之前(使用它自己的一组要叠加和选择的质心)。
我的问题实际上并不是关于在图像上“叠加”注释,而是注释数据。这些从上下文中提取的关键字的汇合使得搜索答案变得非常困难。通过目视检查来注释我的数据要容易得多,而不是用数字检查每个坐标。有没有一种使用通用 Python 库的快速而肮脏的方法来做到这一点?
解决方法
我看到过在 Python 中使用 Matplotlib
和 easygui
完成的类似操作。
您可以使用 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 或其他格式的文件中。