Python一些常用的技巧汇总(持续更新中...)

1. Python读取和保存图片

1.1 使用cv2进行读取

opencv库的imread函数可以读取常用格式的图片,诸如jpg,png,bmp,tif等等格式的图片都能读取,并且将数据保存为numpy数组

import cv2
img = cv2.imread(path)
print(type(img))

示例如下:
在这里插入图片描述

特别地:
★ 使用cv2.imread读取16位深度的图片时,需要使用原属性读取,即img = cv2.imread(name, -1),否则会默认读取为8位数据。
★使用cv2.imread读取彩色图片时,它保存的彩色通道顺序为B G R,所以需要对它的彩色通道进行翻转才能得到真实的图片。针对这个问题,需要在读取图片后执行命令

img = img[:,:,::-1]  # 翻转彩色通道

示例如下:
在这里插入图片描述

1.2 用matplotlib读取图片

同样我们也可以通过matplotlib来读取图片,但需要注意的是
① 它不能读取“.tif”格式的图片;
② 它能正常读取彩色图像,不需要进行彩色通道翻转;
③ 它读取的图片直接归一化到0~1,能直接读取16位的图片;

# 使用matplotlib的方法读取图片
import matplotlib.image as mp    # 读取图片
import matplotlib.pyplot as plt  # 显示图片

name = 'mouse.jpg'
path = './data/label/%s' % name   # 图片路径
img = mp.imread(path)             #

# 显示图片
plt.imshow(img, cmap='gray')      # 设置灰度图显示,而不是默认的伪彩色
plt.axis('off')                   # 关闭坐标轴显示
plt.show()

执行后的结果如下:
在这里插入图片描述

1.3 数组数据保存图片

使用OpenCV和matplotlib的方法读取的图片数据格式为numpy数组,经过我们需要的操作之后,可能我们得到的结果还保存为数组,这时候我们需要对图片进行保存,那么可以通过以下几种方法来实现。

保存图片的流程为:转换数据类型 -> 保存图片

转换数据类型的作用是保真图像,一般会将图片数组转换为uint8类型,如果是16位的图片则转换为uint16类型,之后再执行保存图像的命令,这样可以避免保存图片时产生数值偏差。

转换数据类型的命令: img = np.array(img, dtype=np.uint16)
保存图片: cv2.imwrite(‘filename’, img),如果是彩色图片需要把彩色通道的顺序翻转过来。

注意事项:

# 导入库
import matplotlib.image as mp
import matplotlib.pyplot as plt

在另外几种保存图片的方法中,要注意可能保存的图片不是原始图片。
★ mp.imsave(‘filename’, img) 保存的图片是伪彩色图片
★ plt.imsave(‘filename’, img) 保存的图片不是原始图片
★ plt.savefig(‘filename’, img) 保持的图片是显示出来的图片,不是原图;

相关参考文献:

[1] 百度经验:https://jingyan.baidu.com/article/1876c852572d2f890b137609.html
[2] python实现读取并显示图片的两种方法: https://www.jb51.net/article/102981.htm

猜你喜欢

转载自blog.csdn.net/qq_34917728/article/details/114636472