xiaofan1228 发表于 2020-3-27 00:33:53

mask = r[:, :, i] > 0 这是什么表述方式?

for i in range(8):
    r[:, :, i] = cv2.bitwise_and(img, x[:, :, i])
    mask = r[:, :, i] > 0
    r = 255
    cv2.imshow(str(i), r[:, :, i])

如题,我又带着问号回来了

永恒的蓝色梦想 发表于 2020-3-27 08:12:43

兄弟,你这个问题也太刁钻了……

切片会调用一个对象中的__getitem__方法,普通的切片会向__getitem__传入一个整数或切片对象

但你这是多重切片,也就是向__getitem__传入一个元组,其中包括多个整数或切片对象

给你看个例子:
class n:
        def __getitem__(a,b):return b
        def __delitem__(a,b):return None

>>> k=n()
>>> k
slice(1, 5, None)
>>> k
(slice(1, 4, 2), slice(7, 15, 3), slice(19, 27, 9))
>>> k[:,:,:,:]
(slice(None, None, None), slice(None, None, None), slice(None, None, None), slice(None, None, None))

可以看到,多重切片的语法基本与普通切片相同,但是两项之间要有一个逗号。

PS:这东西大概就是叫多重切片吧…大概

xiaofan1228 发表于 2020-3-27 17:02:30

永恒的蓝色梦想 发表于 2020-3-27 08:12
兄弟,你这个问题也太刁钻了……

切片会调用一个对象中的__getitem__方法,普通的切片会向__getitem__传 ...

嗯嗯,大概明白了多重切片的意思,

其实本身是一个灰度图的通道, 前两个切片是指排和列,第三个i是按位运算的符号。

还有个不明白的地方,为什么一个赋值语句后面要加个 >0 ?

永恒的蓝色梦想 发表于 2020-3-27 17:08:41

xiaofan1228 发表于 2020-3-27 17:02
嗯嗯,大概明白了多重切片的意思,

其实本身是一个灰度图的通道, 前两个切片是指排和列,第三个i是按 ...

因为我没有这个库,所以也只能猜了

可能mask是表示切片的值是否大于0 的变量?

xiaofan1228 发表于 2020-3-28 09:24:14

永恒的蓝色梦想 发表于 2020-3-27 17:08
因为我没有这个库,所以也只能猜了

可能mask是表示切片的值是否大于0 的变量?

意思上应该是这么个意思,这种描述是可行的吗?一个等式加一个比较符号

永恒的蓝色梦想 发表于 2020-3-28 09:43:51

xiaofan1228 发表于 2020-3-28 09:24
意思上应该是这么个意思,这种描述是可行的吗?一个等式加一个比较符号

可行

可以自己试一下a=5>1

赋值符号运算次序最低

xiaofan1228 发表于 2020-3-28 10:02:16

永恒的蓝色梦想 发表于 2020-3-28 09:43
可行

可以自己试一下a=5>1


啊,终于到点上了!!!
所以无论如何,其实返回的是 0 和1 了 ,明白了明白了,感谢!!!!!

永恒的蓝色梦想 发表于 2020-3-28 10:03:49

xiaofan1228 发表于 2020-3-28 10:02
啊,终于到点上了!!!
所以无论如何,其实返回的是 0 和1 了 ,明白了明白了,感谢!!!!!

也感谢你的支持~
页: [1]
查看完整版本: mask = r[:, :, i] > 0 这是什么表述方式?