openCV-python(六)图像 *** 作——通道拆分与合并

openCV-python(六)图像 *** 作——通道拆分与合并,第1张

关于图像的基本 *** 作中,对图像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显示一张图片、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10148051.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存