alex_bn_lee

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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

  两种方法可以实现:

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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. 每一列赋值相同的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> 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 显示

1
2
3
4
5
6
7
import cv2
from PIL import Image
 
img = cv2.imread("yingmu.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 
display(Image.fromarray(img)) 

 

  RGB 转为 灰度图

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

 

  灰度图转为 RGB

1
2
3
4
5
6
7
8
9
# 通过 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中判断两个数组是否相等

posted on   McDelfino  阅读(5564)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-08-14 【432】COMP9024,Exercise9
点击右上角即可分享
微信分享提示