• IUniverse
    2021-10-15
    import numpy as np scores=np.random.rand(256,256,2) scores[:,:,0]=1-scores[:,:,1] mask=np.argmax(scores,axis=2) print(mask)

    作者回复: 你好,IUniverse。感谢你的留言。你的回答是正确的👍🏻。^^

    
    20
  • Yuhan
    2021-10-15
    方法一: result = np.argmax(scores, axis=2) 方法二: result = (scores[:, :, 0] < scores[:, :, 1]).astype('int')

    作者回复: 你好,Yuhan。感谢你的留言。👍🏻,你的答案是正确的。^^

    共 2 条评论
    11
  • 王骥
    2021-10-24
    im_pillow_c1_3ch = im_pillow.copy() im_pillow_c2_3ch = im_pillow.copy() im_pillow_c3_3ch = im_pillow.copy() # 只留 r 通道 im_pillow_c1_3ch[:, :, 1:] = 0 im_pillow_c1_3ch[:, :, 2:] = 0 # 只留 g 通道 im_pillow_c2_3ch[:, :, 0:] = 0 im_pillow_c2_3ch[:, :, 2:] = 0 # 只留 b 通道 im_pillow_c3_3ch[:, :, 0:] = 0 im_pillow_c3_3ch[:, :, 1:] = 0 老师,尝试用深拷贝来实现RGB通道过滤。R 显示没有问题,不过在显示 GB 通道的时候,获得的图片背景是黑色的。是我哪里理解出了问题吗?还是代码有问题?

    作者回复: 你好,王骥,感谢你的留言。 问题出现在最后的那个冒号上^^。 先看只留 r 通道的代码。 im_pillow_c1_3ch[:, :, 1:] = 0 这一行中的"1:"是指将从第一个通道到最后通道的所有数据赋值为0。 im_pillow_c1_3ch[:, :, 2:] = 0这一行中的"2:"是指将从第二个通道到最后通道的所有数据赋值为0。 其实,在第一行中已经把第二行的数据都赋值为0了。 又因为显示R通道的数据是将第1和第2个通道的数据都赋值为0,所以只有R的通道是正常显示出来。 在“只保留g通道”的代码中,"0:"是指从第0个通道开始到最后一个通道的所有数据都赋值为0,所以显示为黑色了。 “# 只留 b 通道”的代码同理。 可以这样修改代码: # 只留 r 通道 im_pillow_c1_3ch[:, :, 1:] = 0 # 只留 g 通道 im_pillow_c2_3ch[:, :, 0] = 0 im_pillow_c2_3ch[:, :, 2] = 0 # 只留 b 通道 im_pillow_c3_3ch[:, :, 0:1] = 0

    共 5 条评论
    5
  • cab
    2021-10-17
    OpenCV提取RGB通道很方便: b, g, r = cv2.split(image)

    作者回复: 你好,cab,感谢你的留言。是的,你说的没错👍🏻。OpenCV可以这么提取通道数据。 文中只是通过确定通道顺序这个小例子,引出Numpy数组的一些操作。

    
    2
  • nico
    2022-06-27
    请问下为什么这样合并下来都是红色底图的,第二种方式是可以的 im_pillow_c1_3ch = np.concatenate((im_pillow_c1, zeros), axis=2) im_pillow_c2_3ch = np.concatenate((im_pillow_c2, zeros), axis=2) im_pillow_c3_3ch = np.concatenate((im_pillow_c3, zeros), axis=2)

    作者回复: hi,你好,非常感谢你的留言。 为了引出np.newaxis和concatenate可能稍微有点绕了,concatenate讲的也有点不是很清楚,我稍后更新一下。 np.concatenate中第一个参数是要合并的数组,np.concatenate((im_pillow_c1, zeros), axis=2) 这么写就是要将im_pillow_c1与zeros沿着axis=2进行合并。合并后的数组的shape是(im_pillow_c1.shape[0], im_pillow_c1.shape[1], 3)。 从第三个维度上来看有三个值,第一个是im_pillow_c1,第二个是0,第三个也是0。 所以这么写下来im_pillow_c1_3ch, im_pillow_c2_3ch, im_pillow_c3_3ch都是一样的结果。 可以这么修改 zeros = np.zeros((im_pillow.shape[0], im_pillow.shape[1], 1)) im_pillow_c1 = im_pillow_c1[:,:,np.newaxis] im_pillow_c2 = im_pillow_c2[:,:,np.newaxis] im_pillow_c3 = im_pillow_c3[:,:,np.newaxis] im_pillow_c1_3ch = np.concatenate((im_pillow_c1, zeros, zeros),axis=2) im_pillow_c2_3ch = np.concatenate((zeros, im_pillow_c1, zeros),axis=2) im_pillow_c3_3ch = np.concatenate((zeros, zeros,im_pillow_c1),axis=2)

    
    1
  • clee
    2021-10-25
    你好,为什么我执行 im_pillow_c1 = im_pillow_c1[:, :, np.newaxis] 后打印im_pillow_c1的shape变量,输出是 (116, 318, 1, 1, 1), 而不是 (116, 318, 1,) 呢

    作者回复: 你好,clee,感谢你的留言。如果是用Jupyter的话,可以检查检查一个单元格是否被执行多次了。 比如“im_pillow_c1 = im_pillow_c1[:, :, np.newaxis] ”它所在的单元格。第一次被执行im_pillow_c1变为(116, 318, 1)。 不小心再次执行的话,不会报错,im_pillow_c1就变为(116, 318, 1,1)了。 如果还是不行的话,你可以把你的代码发给我看看。

    共 2 条评论
    1
  • 平常心
    2021-10-24
    老师,您好!想请教一下,下边这个问题: 课程中,您提到:“其实我们还有一种更加简单的方式获得三个通道的 BGR 数据,只需要将图片读入后,直接将其中的两个通道赋值为 0 即可。” im_pillow = np.array(im) im_pillow[:,:,1:]=0 这个出来的结果是:R通道的图像,想请教一下,G、B通道的图像,用同样的办法实现,代码im_pillow[:,:,:]=0应该是什么?谢谢

    作者回复: 你好,平常心,感谢你的留言。关于G与B通道的代码可以这样写。 ^^ # g 通道 im_pillow_c2_3ch = im_pillow.copy() im_pillow_c2_3ch[:, :, 0] = 0 im_pillow_c2_3ch[:, :, 2] = 0 # b 通道 im_pillow_c3_3ch = im_pillow.copy() im_pillow_c3_3ch[:, :, 0:1] = 0

    共 3 条评论
    1
  • 文森特没有眼泪
    2021-10-15
    mask = (s[:,:,0] > s[:,:,1]) mask = mask.astype('int')

    作者回复: 你好,文森特没有眼泪。首先,谢谢你的留言,然后为你的思路点赞👍🏻。 不过稍微有点小瑕疵,题目要求的是,如果通道0的值大于通道1的值,那么mask对应位置的数值就为0,否则为1。 你这样做的结果正好是相反了。 另外,你可以考虑考虑如何使用聚合函数np.argmax来求解,思考一下它的axis应该等于几,才能获得正确的答案。^^

    
    1
  • 峰老板牛逼
    2022-08-25 来自北京
    课后习题没看懂

    作者回复: 是没看懂Mask吗?如果是的话mask在后面的分割中会有介绍。

    
    
  • 醒狮
    2022-08-02 来自北京
    另有一点想向您说: 我是一名大二的学生,虽然和向您一样的业界佼佼者比不了,但是我把您的课程从头到尾学了一遍,每一个代码我都自己复现了一次,如果您有后面想继续出课的打算,我可以无偿帮您做一些力所能及的事情(比如一些基础部分的理解,和一些代码的操作,运行,翻译等工作),希望您做出的这么好的课程可以被更多人看见!

    作者回复: 好的,没问题,有机会一起合作^^

    
    