matplotllib、opencv、Pillow保存图像方法对比

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

print("########################################## 图像数值范围0-255 #########################################")
img = cv2.imread("./images/dog.jpg")
# 保存数值范围在0-255的常规图片
# 使用matplotlib保存(保存正常,这样保存的图片带有坐标轴和空白区域,想去掉自行百度吧)
plt.axis('off')
plt.imshow(img[:, :, ::-1])
plt.savefig("./images/0-255_plt.jpg")

# 使用opencv保存(保存正常)
try:
    cv2.imwrite("./images/0-255_cv2.jpg", img)
except Exception as e:
    print(e)

# 使用Pillow保存(保存正常)
try:
    x = Image.fromarray(img[:, :, ::-1])
    x.save("./images/0-255_pillow.jpg")
except Exception as e:
    print(e)

print("######################################## 图像数值范围0-1 ###########################################")
img = cv2.imread("./images/dog.jpg")
# 将图像数值缩放到0-1之间(深度学习图像处理经常这么干)
img = img / 255
h, w, c = img.shape

# 在图像中心画个十字线(便于观察输出)
img[int(h / 2) - 5:int(h / 2) + 5, :, :] = np.max(img)
img[:, int(w / 2) - 5:int(w / 2) + 5, :] = np.max(img)
# 查看归一化后的最大值、最小值
print(np.min(img), np.max(img))

# 使用matplotlib保存(保存正常)
plt.axis('off')
plt.imshow(img[:, :, ::-1])
plt.savefig("./images/0-1_plt.jpg")
# plt.show()

# 使用opencv保存(保存的图像为全黑嘿嘿嘿)
try:
    cv2.imwrite("./images/0-1_cv2.jpg", img)
except Exception as e:
    print(e)

# 使用Pillow保存(保存出错,抛异常,不能处理小数)
try:
    x = Image.fromarray(img[:, :, ::-1])
    x.save("./images/0-1_pillow.jpg")
except Exception as e:
    print(e)

print("####################################### 图像数值范围任意 ############################################")
img = cv2.imread("./images/dog.jpg")
# 将图像数值缩放任何可能的值(深度学习图像处理经常这么干)
h, w, c = img.shape
img = img - [127, 127, 127] + np.random.randn(h, w, c)

# 在图像中心画个十字线(便于观察输出)
img[int(h / 2) - 5:int(h / 2) + 5, :, :] = np.max(img)
img[:, int(w / 2) - 5:int(w / 2) + 5, :] = np.max(img)
# 查看像素值的最大值、最小值
print(np.min(img), np.max(img))

# 使用matplotlib保存(保存正常)
plt.axis('off')
plt.imshow(img[:, :, ::-1])
plt.savefig("./images/random_plt.jpg")
# plt.show()

# 使用opencv保存(保存的图像为全黑嘿嘿嘿)
try:
    cv2.imwrite("./images/random_cv2.jpg", img)
except Exception as e:
    print(e)

# 使用Pillow保存(保存出错,抛异常,不能处理小数)
try:
    x = Image.fromarray(img[:, :, ::-1])
    x.save("./images/random_pillow.jpg")
except Exception as e:
    print(e)

总结:
    1、假如要保存的矩阵数值是[0, 255]之间的标准型,使用opencv、matplotlib、Pillow效果一样
    2、假如要保存的矩阵数值不是[0, 255]之间的标准型,如[0, 1],
        i、使用matplotlib可以保存图片,但是要使用方法去掉坐标轴和边框
        ii、使用opencv保存得到的图像是全黑的
        iii、使用Pillow保存图像报错抛异常,不能处理小数
    3、假如要保存的矩阵数值是一般小数或整数,则数值接近于255显示为白色,数值接近于0显示为黑色(所以0-1之间opencv显示为全黑) 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值