opencv inRange像素位置

时间:2018-11-01 13:27:11

标签: python numpy opencv

我需要获取RGB颜色值范围内的一些像素

我使用inRange函数:

 mask = cv2.inRange(image, lower, upper)

现在我得到了这个蒙版,我需要对过滤后的像素进行一些操作-即找到两个随机像素之间的距离

我该怎么做?

如果我致电print(image),则会得到以下数组:

[[[ 78  94 107]
[ 82  97 113]
[ 87 102 118]
...
[101 114 116]
[108 120 122]
[109 121 123]]

据我了解,这是一个数组,其中键是x和y像素位置,值是RGB代码。但是如果我打电话给print(mask.nonzero()),我会看到

(array([126, 126, 126, ..., 168, 168, 168], dtype=int64),...)

我并没有真正理解此数组中的内容,在文档中我没有找到返回值的类型

1 个答案:

答案 0 :(得分:2)

由于mask是一个2d数组,所以numpy.nonzero(..)方法将返回一个2元组,第一项是第一个非零坐标的索引数组,第二个是非零坐标的索引数组元组是第二个坐标的索引数组,该数组非零。

您可以np.transpose(..)来获得一个 n×2 矩阵,其中每一行的像素的两个坐标都不为零,因此:

print(np.transpose(mask.nonzero()))