• 【646】灰度图array转为RGB三通道array


      两种方法可以实现:

    • 通过 numpy 自己实现
    • 通过 cv2.cvtColor 函数实现,灰度图转 RGB

      所谓的灰度图转为三通道,就是三个通道都是一样的信息,相当于相同维度信息的重复,主要是通过 numpy.array 来实现,其实是可以通过类似广播的形式来实现。

    1. 每一行赋值相同的内容

    >>> a = np.zeros((3,3))
    >>> a
    array([[0., 0., 0.],
           [0., 0., 0.],
           [0., 0., 0.]])
    >>> b = np.arange(3)
    >>> b
    array([0, 1, 2])
    >>> a[:, :] = b   # 等价于 a[...] = b
    >>> a
    array([[0., 1., 2.],
           [0., 1., 2.],
           [0., 1., 2.]])
    

    2. 每一列赋值相同的内容

    >>> a = np.zeros((3,3))
    >>> a
    array([[0., 0., 0.],
           [0., 0., 0.],
           [0., 0., 0.]])
    >>> b = np.arange(3)
    >>> b
    array([0, 1, 2])
    >>> c = b.reshape((3,1))
    >>> c
    array([[0],
           [1],
           [2]])
    >>> a[...] = c
    >>> a
    array([[0., 0., 0.],
           [1., 1., 1.],
           [2., 2., 2.]])
    

    3. 灰度图转为RGB三通道

    • 灰度图是二维数据,首先通过 np.expand_dims() 增加一个维度
    • 然后直接通过赋值即可以填充其他三个通道为相同的信息

      原图的 RGB 显示

    import cv2 
    from PIL import Image
    
    img = cv2.imread("yingmu.jpg")
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    display(Image.fromarray(img)) 

      RGB 转为 灰度图

    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    
    display(Image.fromarray(gray))
    

      灰度图转为 RGB

    # 通过 cv2 函数
    img = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB)
    
    # 通过 numpy 实现
    img_arr = np.zeros_like(img)
    img_arr[...] = np.expand_dims(gray, axis=-1)
    
    # 用来判断两者是否相同,结果是 True
    (img == img_arr).all()
    

      关于判断两个 numpy.array 是否相同参考博文:Numpy中判断两个数组是否相等

  • 相关阅读:
    hibernate注解note
    hibernate的批量删除
    hibernate实现多表联合查询
    hibernate联合主键注解方式
    jsp之radio取值与赋值
    @Transient注解的使用
    工程师如何在工作中提升自己?(公众号)
    HTML中让表单input等文本框为只读不可编辑的方法
    ajax, jQuery, jQueryeasyUI
    关于easyui的问答(来自百度问答)
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/15140708.html
Copyright © 2020-2023  润新知