gpt4 book ai didi

python - 如何从 numpy 切片对象获取坐标

转载 作者:行者123 更新时间:2023-11-28 20:47:57 24 4
gpt4 key购买 nike

我有一个函数,它接收一个图像和一个切片对象,指定要对其进行操作的图像的子区域。为了调试目的,我想在指定区域周围画一个框。绘制一个盒子最简单的方法是获取它的两个角的坐标。但是,我找不到从切片对象中获取这些坐标的好方法。

当然有一种非常低效的方法,我定义一个大矩阵并使用我的切片来找出哪些元素受到影响

#given some slice like this
my_slice = np.s_[ymin:ymax+1, xmin:xmax+1]

#recover its dimensions
large_matrix = np.ones((max_height, max_width))
large_matrix[my_slice] = 1
minx = np.min(np.where(large_matrix == 1)[0])
maxx = np.max(np.where(large_matrix == 1)[0])
...

如果这是最好的方法,我可能不得不从传递切片对象切换到某种矩形对象。

最佳答案

我经常使用dir 来查看对象内部。在你的情况下:

>>> xmin,xmax = 3,5
>>> ymin,ymax = 2, 6
>>> my_slice = np.s_[ymin:ymax+1, xmin:xmax+1]
>>> my_slice
(slice(2, 7, None), slice(3, 6, None))
>>> my_slice[0]
slice(2, 7, None)
>>> dir(my_slice[0])
['__class__', '__cmp__', '__delattr__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'indices', 'start', 'step', 'stop']

那些 startstepstop 属性看起来很有用:

>>> my_slice[0].start
2
>>> my_slice[0].stop
7

(老实说,我使用 IPython,所以我通常不会使用 dir,而是创建一个对象,然后按 TAB 键查看内部。)

因此,要将您的 my_slice 对象变成角落,只需:

>>> [(sl.start, sl.stop) for sl in my_slice]
[(2, 7), (3, 6)]

关于python - 如何从 numpy 切片对象获取坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17750974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com