python读取图像方式问题(RGB)

我们在读取图片时由于个人习惯不同,使用不同的包读取,显示图片的结果也不同。所以我们需要作出一些区分。

MATLAB生成一张渐变图片来区分几种图片读取方式
在这里插入图片描述
分别用PIL,Matplot,Opencv读取图像,但是都用plt显示,可以看出opencv读取图像的BGR,其它的两种读取图像的RGB,所以这点我们需要注意
在这里插入图片描述

方法一:利用PIL中的Image函数

Note: 这个函数读取出来不是array格式

这时需要用 np.asarray(im) 或者np.array()函数将其转化成array,(区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝)。然后可以使用如下的方法来查看图像的格式(下面是基于python3的编程格式):

from PIL import Image  
import numpy as np  
Image = Image.open('/data/xx.png')   
Image.show()      
Image.save('/data/xxx.png')  
Image_array = np.array(Image)  
 
"""
print(type(img))  #显示类型
print(img.shape)  #显示尺寸
print(img.shape[0])  #图片宽度
print(img.shape[1])  #图片高度
print(img.shape[2])  #图片通道数
print(img.size)   #显示总像素个数
print(img.max())  #最大像素值
print(img.min())  #最小像素值
print(img.mean()) #像素平均值
"""

方法二:利用matplotlib.pyplot as plt用于显示图片

matplotlib.image as mpimg 用于读取图片,并且读取出来就是array格式

import matplotlib.pyplot as plt  
import matplotlib.image as mpimg  
import numpy as np  
Image = mpimg.imread('/data/xx.png')  
print Image.shape  
plt.imshow(Image)  

方法三:OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。更详细的请参考OpenCV的参考文档。

利用opencv-python接口,cv2.imread()读出来同样是array形式,但是值得注意的是,opencv读取图片并不是RGB格式的

import cv2  
img = cv2.imread('/data/xx.png')  #读取一张图片
cv2.namedWindow('image', cv2.WINDOW_NORMAL)#给显示的窗口命名,后面的flag默认为cv2.WINDOW_AUTOSIZE,自动调整边框#,但是在条形图过长时,使用windownormal我们可以自行调整边框
cv2.imshow('image',img)#展示图片
cv2.waitKey(0)#等待按键按下,如果不添最后一句,在IDLE中执行窗口直接无响应。在命令行中执行的话,则是一闪而过。
cv2.destroyAllWindows()#清除所有窗口
#参数中填入图片的完全路径或者相对路径
print(img.shape)  

我们如果不进行其他转换或者使用图片,一直使用opencv也没有什么问题,但是如果再用plt等其他工具显示就会出现问题,需要转换通道。

b,g,r = cv2.split(img) 
img_rgb = cv2.merge([r,g,b]) 
plt.figure() 
plt.imshow(img_rgb) 
plt.show() 

我们这里再显示一下,可以看出转换RGB后恢复正常了!
在这里插入图片描述

方法四:图像的存取用scipy这个库里的东西,读出来是矩阵形式,并且按照(H,W,C)形式保存

import matplotlib.pyplot as plt  
from scipy import misc  
import scipy  
Image = misc.imread('/data/xx.png')  
scipy.misc.imsave('/data/xxx.png', I)  
plt.imshow(Image)  
plt.show()  
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值