【Python】python读取,显示,保存图像的几种方法

一、PIL:Python Imaging Library(pillow)

PIL读取图片不直接返回numpy对象,可以用numpy提供的函数np.array()进行转换,亦可用Image.fromarray()再从numpy对象转换为原来的Image对象,读取,显示,保存以及数据格式转换方法见如下代码:

python 复制代码
from PIL import Image
import numpy as np

imagepath = 'img.jpg' 
image = Image.open(imagepath)
image.show()
image.save('img1.jpg') # 图片保存在项目文件夹下

二,Matplotlib

读取,显示,保存方法见如下代码:

python 复制代码
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

imagepath = 'img.jpg'
image = mpimg.imread(imagepath)
# 显示图片
plt.imshow(image)
# 保存文件
mpimg.imsave("cat1.jpg", image)

三,OpenCV

1.直接将图像显示在窗口中,并保存。

python 复制代码
import cv2
import matplotlib.pyplot as plt

imagepath = 'img.jpg'
image = cv2.imread(imagepath)

# 保存图片
cv2.imwrite("cat2.jpg", image)

# 显示图片
cv2.imshow('bgrImage', image) # 对窗口进行命名并显示
cv2.waitKey()
cv2.destroyAllWindows()

2.放置在画布中显示

python 复制代码
import cv2
import matplotlib.pyplot as plt

# 设置图片路径
imagepath = 'img.jpg'
image = cv2.imread(imagepath)

# 将BGR图像转换为RGB
img_1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 显示图形
plt.subplot() # 直接指定划分方式和位置
plt.imshow(image)    #显示图像
plt.title('噪声图像')    # 设置标题
plt.xticks([]), plt.yticks([])    # 设置坐标轴,参数[]是不显示坐标轴
plt.show()

由于opencv默认读取图片用的是BGR通道,所以后续处理如果用RGB通道,如matplotlib就是采用的RBG通道,则需要进行色彩转换,否则会因为不兼容导致色彩出现偏差,所以可以加上这一行代码 :

python 复制代码
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB),

具体原因见我的一篇博客:【Bug】当用opencv库的imread()函数读取图像,用matplotlib库的plt.imshow()函数显示图像时,图像色彩出现偏差问题的解决方法-CSDN博客

当要显示多张图片的时候,需要用plt.subplot()函数对画布区域进行划分,如果没有指定参数,则默认为一个子图。详细用法见我的博客:【Python】Matplotlib-多张图像的显示-CSDN博客

显示效果如下:

相关推荐
向上的车轮几秒前
Python 大数据处理不慢:Polars + DuckDB + Arrow 实战指南
开发语言·python
Nebula_g5 分钟前
云禾外卖补充—项目整体后端运行逻辑-对流程的更深层次理解
java·开发语言·网络·数据库·状态模式·javase
程序员小孔.14 分钟前
基于 SpringBoot + UniApp + Vue 的家政服务系统设计与实现
前端·数据库·spring boot·python·docker·微信小程序
程序猿乐锅35 分钟前
【从0-1学习Python | 第六篇】 Python 函数:定义、参数与返回值
开发语言·python·学习
G018_star sky♬36 分钟前
java中的字符串常见方法
java·开发语言
熊猫钓鱼>_>38 分钟前
Kotlin Multiplatform for OpenHarmony 实战:kotlinx-serialization JSON 适配
开发语言·华为·kotlin·华为云·json·harmonyos·code
MasonYyp2 小时前
声音转文字的模型
python
银河技术2 小时前
从脚本到 Operator:用 Go 构建可靠的微服务自动扩缩容控制器
开发语言·微服务·golang
GIS数据转换器4 小时前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
Wang's Blog9 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友