OpenCV中的inRange像素位置

3

我需要获取一些符合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),...)

我不太理解这个数组中的内容,也没有在文档中找到返回值的类型。


这里的 lowerupper 是什么? - Willem Van Onsem
@WillemVanOnsem 这是 RGB 范围 - ([25, 146, 190], [62, 220, 250])。 - Alexander Karp
1个回答

3
由于mask是一个二维数组,numpy.nonzero(..) 方法将返回一个 2-tuple。第一项是第一个坐标非零的索引数组,第二个元组是第二个坐标非零的索引数组。
您可以使用np.transpose(..)来转置它,以获得一个 n×2 矩阵,每行为非零像素的两个坐标,因此:
print(<b>np.transpose(</b>mask.nonzero()<b>)</b>)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接