利用python读取图像数据的方法很多,下面总结一下小编平时读取图像数据的方式。
小编平时读取数据的方式主要有两种,一种是PIL模块的Image,一种就是利用opencv来读取。
1.利用opencv
import cv2
filepath = '/home/hhhh/aa/'
filename = 'image.png'
image = cv2.imread(filepath + filename)
下面随便读取一张图片显示出来看一下吧。。
原始的图片是这样的:
好看吧!!!宫崎骏的哈尔的移动城堡,来看看显示出来的是怎么样的,我们选择两种显示方式:
第一个是openCV的cv2.imshow(),一个是matplotlib的显示方式。
cv2.imshow('1',image)
显示出来的图是这样的:
很完美的显示了原图。
接下来看看matplot的显示方式:
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()
显示出来的图片是这样的:
可以看到opencv显示出来的颜色和matplot显示出来的图片的颜色发生了变化,造成这种差异的原因是opencv读取和显示出来的图片数据格式是(B,G,R)格式的,而matplot显示的(R,G,B)格式的,所以第一通道和第三通道的数据相互交换了。我们尝试利用opencv将三个通道变成(R,G,B)的格式,利用以下代码:
rbg_image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
plt.imshow(rgb_image)
plt.show()
显示出来的图像是这样的:
这样rgb_image就是转化过来的rgb通道的图像了。
其实也可以用numpy转化通道顺序,因为opencv读取出来的就是ndarray数据格式的,请看:
rbg_image = image[:,:,::-1]
#将通道逆着来
plt.imshow(rgb_image)
plt.show()
如果想要利用opencv读取灰度图像,那么可以使用以下代码:
image = cv2.imread(filepath + filename,cv2.IMREAD_GRAYSCALE)
保存:
cv2.imwrite(filename,image)
Image
from PIL import Image
image = Image.open(filepath + filename)
image_arr = np.array(image)
plt.imshow(image_arr)
plt.show()
plt.imsave(filename,image) ## 保存图像