首页 > 解决方案 > 按图像形状夹紧:用 Numpy 数组中的不同规则替换 X、Y 坐标

问题描述

我有一张形状 (225, 400, 3) 的图片和一组 x,y 坐标:

polygon = np.array([[150, 80], [350, 80], [420, 280], [350, 250], [150, 250]], np.int32)

我想将这些值钳制到我的图像尺寸,所以任何给定的坐标对都不会在我的图像之外。这意味着我需要[X > 400, ...]用 400替换所有 x 坐标,[..., Y > 225]用 225 替换所有 y 坐标。

我试图替换所有大于 255 的 Y 坐标但没有成功,它也钳住了 X 坐标。

polygon[(polygon > 225).all(axis=1)] = 225

在这种情况下,通过不同规则钳制 Numpy 数组值的正确方法是什么?

标签: pythonarraysnumpyopencv

解决方案


IIUC 和坐标是指每一行包含一个(x,y)坐标(注意这与 不同axis),然后您可以索引并使用clip

polygon[:,0] = polygon[:,0].clip(max=400)
polygon[:,1] = polygon[:,1].clip(max=255)

print(polygon)

array([[150,  80],
       [350,  80],
       [400, 255],
       [350, 250],
       [150, 250]])

推荐阅读