本文主要为大家讲解Python读取图像方式(RGB),有需要的朋友可以参考一下:
我们在读取图片时由于个人习惯不同,使用不同的包读取,显示图片的结果也不同。所以我们需要作出一些区分。
MATLAB生成一张渐变图片来区分几种图片读取方式
分别用PIL,Matplot,Opencv读取图像,但是都用plt显示,可以看出opencv读取图像的BGR,所以这点我们需要注意。
### 方法一:利用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()
以上就是“Python怎么读取图片RGB”的详细内容,想了解更多请持续关注编程学习网!
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/7978/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取