OpenCV使用numpy数组来存储图像数据。在this问答中,我被告知要访问图像中感兴趣的子区域,可以使用roi = img[y0:y1, x0:x1]
格式。
我很困惑,因为当我在终端中创建一个numpy数组并进行测试时,我似乎没有得到这种行为。下面我想得到roi [[6,7], [11,12]]
,其中y0 = index 1, y1 = index 2
,和x0 = index 0, x1 = index 1
。
那为什么我只需要arr[1:3, 0:2]
就能得到我想要的?我本来想用arr[1:2, 0:1]
得到的。
当我把一个n乘n序列[a:b,c:d]切片时,a和c是0..n-1的预期范围,而b和d是1..n的预期范围
在您发布的示例中,numpy和cv2的工作与预期一样。Indexing or Slicing in numpy与python中的一般情况一样,是基于0的,其形式是
[a, b)
,即不包括b
。重新创建示例:
所以语句
arr[1:2, 0:1]
意味着在row=1
(第1行到但不包括第2行)和column=0
(我们期望6
)处获取值:类似地,对于
arr[1:3, 0:2]
,我们期望第1、2行和第0、1列:因此,如果您想要的是区域
[[a, b], [c, d]]
包含b和d,那么您真正需要的是:其他示例:
假设您需要所有列,但只需要第0行和第1行:
这里的
arr[:2, :]
表示所有行(最多2行,但不包括2行),后跟所有列:
。假设您希望每隔一列,从列索引0(以及所有行)开始:
其中
::2
遵循start:stop:step
符号(其中stop不包括在内)。相关问题 更多 >
编程相关推荐