深度学习中各种图像库的图片读取方式总结
在数据预处理过程中,经常需要写python代码搭建深度学习模型,不同的深度学习框架会有不同的读取数据方式(eg:Caffe的python接口默认BGR格式,Tensorflow默认RGB格式),经常需要借助python图像库来读取图像并进行一系列的图像处理工作。
这篇文章总结了Python图像库处理数据的基本方式:
1.Opencv
2.PIL(pillow)
3.matplotlib.image
4.scipy.misc
5.skimage
6.Tensorflow
opencv: cv2.imread
opencv是最常用的图像处理库
基本图像操作:
import cv2
import numpy as np
#读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.IMREAD_UNCHANGED包含alpha通道
img = cv2.imread('aa.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 转换为灰度图
img1 = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) # 转换为RGB
cv2.imshow('src',img)
cv2.imshow('gray',gray)
cv2.imshow('RGB',img1)
print(img.shape) # (h,w,c)
print(img.size) # 像素总数目
print(img.dtype) # 像素类型
cv2.imwrite('test.jpg',img1) # 保存图像
cv2.waitKey()
值得注意的是:
1.opencv读进来的图片已经是一个numpy矩阵了,彩色图片维度是(高度,宽度,通道数)。数据类型是uint8。
2.opencv读进来的图片的通道排列是BGR,而不是主流的RGB
Caffe使用opencv处理图像的基本操作:
import os
import numpy as np
import cv2
import sys
caffe_root = './fancp/caffe/' #指定caffe路径
sys.path.insert(0, caffe_root + 'python')
import caffe
def predict(path, deploy, weight):
net = caffe.Net( deploy, weight, caffe.TEST)
batch_size, channels, height, width = net.blobs['data'].data.shape
X = np.zeros([1,channels,height,width], dtype = np.float32) # caffe的输入格式[N,C,H,W]
img = cv2.imread(path).astype(np.float32)# 读取图片,并进行类型转换
Img = cv2.resize(img,(102,102))[11:90,11:90,::-1]# Resize以及ROI操作
img -= 127.5
img /= 128.0 # 归一化操作
img = np.transpose(img,(2,0,1)) # 通道转换,有H,W,C转变成 C,H,W
#在深度学习搭建CNN时,往往要做相应的图像数据处理,比如图像要扩展维度,比如扩展成(batch_size,channels,height,width)。
img=np.expand_dims(img,axis=0)
X[0,:,:,:] = img
net.blobs['data'].