opencv inrange函数



Opencv inRange函数

inRange(...)

inRange(src,lowerb, upperb[, dst]) -> dst

python给出的help

第一个参数原数组,可以为单通道,多通道

Lower 下界

Upper 上届

 

Python中如果是单通道,假设lower=[0]upper=[128],那么,对每个数在0-128之间为255,否则为0

如果是多通道,假设lower=[00,0]upper=[128,128,128128],那么,对每一行,对任意一个数,如果在范围内,则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

你可能感兴趣的:(opencv,InRange)