Opencv inRange函数
inRange(...)
inRange(src,lowerb, upperb[, dst]) -> dst
python给出的help
第一个参数原数组,可以为单通道,多通道
Lower 下界
Upper 上届
在Python中如果是单通道,假设lower=[0],upper=[128],那么,对每个数在0-128之间为255,否则为0;
如果是多通道,假设lower=[0,0,0],upper=[128,128,128,128],那么,对每一行,对任意一个数,如果在范围内,则255,否则0,最后的几个数相与,因此如果都是255,为255,否则为0
在c++里面查差不多,对rgb每个分量,分别测试是否在范围内,结果相与
测试
Mat 数据hsv=(bgr存储)
10 0 42 32 66 123 44 3 85 82 74 92 95 17 66 38 28 93 69 39 79 3
71 4 77 5 68
代码inRange(hsv, Scalar(0, 0, 0),
Scalar(100, 100, 255), mask);
Mask=[255 255 255 255 255 255 255 255 255]
代码inRange(hsv, Scalar(0, 0, 0),
Scalar(100, 100, 100), mask);
Mask=[ 255 0 255 255 255 255 255 255 255].
Import numnp as np
Import cv2
X=np.array([[[0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[1, 2, 23],
[4, 5, 26]]])
y=np.array([0,1,2])
z=np.array([18,19,20])
cv2.inRange(x,y,z)
结果
array([[255, 255, 255],
[255, 255, 255],
[255, 0, 0]], dtype=uint8)
由于 [1, 2, 23],
[4, 5, 26]有元素超出范围,那么结果为0