
关于图像的基本 *** 作中,对图像RGB通道的拆分与合并,本文介绍两种方式,第一种是使用opencv-python,即cv2,第二种使用Pillow即PIL模块。这里要注意的是,Pillow处理图像时,通道顺序为正常的RGB模式,但是opencv处理图像,通道顺序比较特殊,为BGR,所以这里要注意。
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库 *** 作。本人偏爱 matpoltlib,因为它的语法更像 matlab。
一、matplotlib
1 显示
复制代码
import matplotlibpyplot as plt # plt 用于显示
import matplotlibimage as mpimg # mpimg 用于读取
import numpy as np
lena = mpimgimread('lenapng') # 读取和代码处于同一目录下的 lenapng
# 此时 lena 就已经是一个 nparray 了,可以对它进行任意处理
lenashape #(512, 512, 3)
pltimshow(lena) # 显示
pltaxis('off') # 不显示坐标轴
pltshow()
复制代码
2 显示某个通道
复制代码
# 显示的第一个通道
lena_1 = lena[:,:,0]
pltimshow('lena_1')
pltshow()
# 此时会发现显示的是热量图,不是我们预想的灰度图,可以添加 cmap 参数,有如下几种添加方法:
pltimshow('lena_1', cmap='Greys_r')
pltshow()
img = pltimshow('lena_1')
imgset_cmap('gray') # 'hot' 是热量图
pltshow()
复制代码
3 将 RGB 转为灰度图
matplotlib 中没有合适的函数可以将 RGB 图转换为灰度图,可以根据公式自定义一个:
复制代码
def rgb2gray(rgb):
return npdot(rgb[,:3], [0299, 0587, 0114])
gray = rgb2gray(lena)
# 也可以用 pltimshow(gray, cmap = pltget_cmap('gray'))
pltimshow(gray, cmap='Greys_r')
pltaxis('off')
pltshow()
复制代码
4 对图像进行放缩
这里要用到 scipy
复制代码
from scipy import misc
lena_new_sz = miscimresize(lena, 05) # 第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸
pltimshow(lena_new_sz)
pltaxis('off')
pltshow()
复制代码
5 保存图像
51 保存 matplotlib 画出的图像
该方法适用于保存任何 matplotlib 画出的图像,相当于一个 screencapture。
pltimshow(lena_new_sz)
pltaxis('off')
pltsavefig('lena_new_szpng')
52 将 array 保存为图像
from scipy import misc
miscimsave('lena_new_szpng', lena_new_sz)
53 直接保存 array
读取之后还是可以按照前面显示数组的方法对图像进行显示,这种方法完全不会对图像质量造成损失
npsave('lena_new_sz', lena_new_sz) # 会在保存的名字后面自动加上npy
img = npload('lena_new_sznpy') # 读取前面保存的数组
二、PIL
1 显示
from PIL import Image
im = Imageopen('lenapng')
imshow()
2 将 PIL Image 转换为 numpy 数组
im_array = nparray(im)
# 也可以用 npasarray(im) 区别是 nparray() 是深拷贝,npasarray() 是浅拷贝
3 保存 PIL
直接调用 Image 类的 save 方法
from PIL import Image
I = Imageopen('lenapng')
Isave('new_lenapng')
4 将 numpy 数组转换为 PIL
这里采用 matplotlibimage 读入数组,注意这里读入的数组是 float32 型的,范围是 0-1,而 PILImage 数据是 uinit8 型的,范围是0-255,所以要进行转换:
import matplotlibimage as mpimg
from PIL import Image
lena = mpimgimread('lenapng') # 这里读入的数据是 float32 型的,范围是0-1
im = Imagefromarray(npuinit8(lena255))
imshow()
5 RGB 转换为灰度图
from PIL import Image
I = Imageopen('lenapng')
Ishow()
L = Iconvert('L')
Lshow()
以上就是关于openCV-python(六)图像 *** 作——通道拆分与合并全部的内容,包括:openCV-python(六)图像 *** 作——通道拆分与合并、怎么用python显示一张图片、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)