python读取、显示、保存图像的各种方式

首先导入各种相关库

import numpy as np
import cv2
import matplotlib.pyplot as plt
from PIL import Image

读取图像变为矩阵形式

case1:利用opencv

利用cv2.imread进行读取

Img_BGR = cv2.imread('lena512color.tiff')

注意:

  • cv2读取的图形颜色格式为BGR,所以需要进行一个调序;
  • Img_BGR为矩阵形式
'''利用系统函数'''
Img_RGB = cv2.cvtColor(Img_BGR, cv2.COLOR_BGR2RGB)
'''手动调序'''
#Img_RGB = Img_BGR[:,:,(2,1,0)]

转灰度:

'''调用函数'''
Img_gray = cv2.cvtColor(Img_BGR, cv2.COLOR_BGR2GRAY)
'''利用公式'''
#r,g,b = [Img_RGB[:,:,i] for i in range(3)]
#Img_gray = r*0.299+g*0.587+b*0.114 

case2:利用PIL.Image

使用Image.open()打开图像:

Img = Image.open('lena512color.tiff')

注意:这里Img的格式是Image:

可以看到,默认读取的图片格式对应原始图像的格式,这里为RGB,如果你打开一张灰度lena图,对应的就是Mode:L。当然,也可以像opencv那样转换格式,这里用到convert()

Img_GRAY = Img.convert('L')
'''
1 ------------------(1位像素,黑白,每字节一个像素存储)
L ------------------(8位像素,黑白)
P ------------------(8位像素,使用调色板映射到任何其他模式)
RGB------------------(3x8位像素,真彩色)
RGBA------------------(4x8位像素,带透明度掩模的真彩色)
CMYK--------------------(4x8位像素,分色)
YCbCr--------------------(3x8位像素,彩色视频格式)
I-----------------------(32位有符号整数像素)
F------------------------(32位浮点像素)
'''
mode 解释
1 1位像素,黑白,每字节一个像素存储
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3x8位像素,真彩色
RGBA 4x8位像素,带透明度掩模的真彩色
CMYK 4x8位像素,分色
YCbCr 3x8位像素,彩色视频格式
I 32位有符号整数像素
F 32位浮点像素

转换为矩阵只需使用np.array()即可!

显示图像

case1

直接使用Image对应的show()。首先将矩阵形式的图像转化为Image格式,调用show(),就是自定显示对应mode的图像

'''以灰度模式为例'''
Img_GRAY = Image.fromarray(Img,'L')
Img_GRAY.show()

注意:RGB模式可以缺省

case2

使用matplotlib里面的画图工具包

plt.imshow(Img_GRAY, cmap = 'gray')
plt.title('GRAY') #标题
plt.axis('off')   #取消坐标轴
plt.show()

注意:

  • cmap: 颜色图谱(colormap), 默认绘制为RGB(A)颜色空间,绘制灰度图cmap = 'gray'
  • 一般个人仅用其画RGB和灰度图,如YCbCr格式,建议使用case1

保存图像

直接使用save()将Image格式的图像保存即可

Imag_GRAY.save("lena_gray.tiff")

当然,还有更多方法,等待探索,不过以上方案应该已足够应付!

可以参考这一篇,互为补充:

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读