pillow opencv matplotlib读写图片有什么区别

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

file_path = '1.png'

读彩色图像

区别:

  1. opencv-python读出来的是BGR颜色通道的
  2. PIL读出的是PIL类格式的,而cv和plt是numpy数组
# 读取彩色图像 都是H×W×C
img1 = cv2.imread(file_path)  # BGR
img2 = plt.imread(file_path)  # RGB
img3 = np.array(Image.open(file_path))  # RGB

BRG和RGB格式互转

# 用opencv-python
image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB)

image_bgr = cv2.cvtColor(image_rgb, cv2.COLOR_RGB2BGR)

# 利用数组切片 
# 因为shape是H×W×C,BGR倒着读就是RGB
image_rgb = image_bgr[:, :, ::-1] 

读灰色图像

区别:

  1. plt没法读取时设置读灰色图像,但是可以在plt.imshow()的时候设置按照灰度图显示
# 以灰度图方式读取 
img4 = cv2.imread(file_path, flags=cv.IMREAD_GRAYSCALE)
img6 = np.array(Image.open(file_path).convert("L"))

# img5 = plt.imread(file_path) 
# plt没法以灰度方式读取,只能在imshow的时候以灰度方式显示plt.imshow(a, cmap='viridis', interpolation='nearest')

opencv的flags参数

常数 效果
cv2.IMREAD_COLOR 1 读取图像时保留颜色通道(默认值)
cv2.IMREAD_GRAYSCALE 0 以灰度模式读取图像
cv2.IMREAD_UNCHANGED -1 以包含 alpha 通道的方式读取图像

保存图像

matplotlib:

plt保存原理是先创建画板,然后把图像绘制上去。

这会导致保存图像出现白边,以及像素大小与想要的大小不符的现象。不推荐使用!!

plt.imshow(image)
plt.savefig('output.png', bbox_inches='tight', transparent=True, dpi=300, figsize=(6, 4))

opencv:

简单好用

cv2.imwrite("output.jpg", img) # img是numpy数组

pillow:

必须先转PIL对象才能保存

# 使用PIL保存NumPy数组为图像
image = Image.fromarray(numpy_array)

# 保存图像
image.save("output.png")

 

显示图像

区别:

  1. PIL调用系统默认的图片查看工具
  2. opencv和matplotlib有自己的可视化工具,且matplotlib可以集成在Pycharm的SciView
# PIL 
image = Image.open("image.jpg")
image.show()

# opencv 
image = cv2.imread("image.jpg")
cv2.imshow("Image", image)
cv2.waitKey(0) # 修改等待时间可以用于展示视频帧
cv2.destroyAllWindows()

# matplotlib
plt.imshow(img)
plt.show()

相关推荐

  1. pillow opencv matplotlib图片什么区别

    2023-12-07 07:46:03       31 阅读
  2. equals和==什么区别

    2023-12-07 07:46:03       17 阅读
  3. qt中锁与互斥锁的区别

    2023-12-07 07:46:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 07:46:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 07:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 07:46:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 07:46:03       20 阅读

热门阅读

  1. 原型模式(Prototype Pattern)

    2023-12-07 07:46:03       33 阅读
  2. python跑ncnn(验证模型是否转换成功)

    2023-12-07 07:46:03       37 阅读
  3. 排序算法之二:冒泡排序

    2023-12-07 07:46:03       47 阅读
  4. 泛洪填充(Flood Fill)

    2023-12-07 07:46:03       35 阅读
  5. 经典C语言程序之 编程】详细解析及示例代码

    2023-12-07 07:46:03       39 阅读
  6. 机器学习---pySpark案例

    2023-12-07 07:46:03       38 阅读
  7. C# 未处理System.InvalidOperationException HResult=-2146233079

    2023-12-07 07:46:03       34 阅读
  8. mysql配置所有人可连接_mysql配置允许外界连接

    2023-12-07 07:46:03       32 阅读
  9. Git 克隆子目录

    2023-12-07 07:46:03       39 阅读
  10. mysql的show full processlist状态详解

    2023-12-07 07:46:03       28 阅读
  11. leetcode707.设计链表

    2023-12-07 07:46:03       39 阅读
  12. 晶闸管的管脚及好坏判别

    2023-12-07 07:46:03       39 阅读