【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 2021-08-14 13:52 McDelfino 阅读(5564) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2019-08-14 【432】COMP9024,Exercise9