目录
- opencv
- PIL(pillow)
- matplotlib.image
- scipy.misc
- skimage
1.OpenCV
OpenCV是常用的图像处理库,用OpenCV来读取图像的特点:
- OpenCV 读进来的图片已经是一个 numpy 矩阵了,彩色图片维度是高度、宽度、通道数(height,width,channels),数据类型是 uint8 。
- OpenCV 读进来的图片的通道排列是 BGR ,而不是主流的 RGB ,需要转换才能变成 RGB 。
- OpenCV 读取灰度图的时候,可以直接参数读取灰度图;或者先读入彩色图,再转灰度图。
import cv2
import matplotlib.pyplot as plt
# 读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.IMREAD_UNCHANGED包含alpha通道
img = cv2.imread('2.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转换为RGB
# plt显示图像
plt.subplot(131)
plt.imshow(img)
plt.title('img')
plt.axis('off')
plt.subplot(132)
plt.imshow(gray)
plt.title('gray')
plt.axis('off')
plt.subplot(133)
plt.imshow(img_rgb)
plt.title('img_rgb')
plt.axis('off')
plt.show()
# cv2显示图像
cv2.imshow('src', img)
cv2.imshow('gray', gray)
cv2.imshow('RGB', img_rgb)
print(img.shape) # (h,w,c)
print(img.size) # 像素总数目
print(img.dtype) # 像素类型
print(gray.shape)
print(gray.size)
print(gray.dtype)
cv2.imwrite('test.jpg', img_rgb) # 保存图像
cv2.waitKey() # 一直显示
# (336, 500, 3)
# 504000
# uint8
# (336, 500)
# 168000
# uint8
其中,plt 和 cv2的颜色刚好相反, 这是一个接口的问题,因为plt是RGB接口的,但是cv2是BGR接口的。
OpenCV 读取灰度图的时候,可以直接参数读取灰度图;或者先读入彩色图,再转灰度图。
import cv2
# 直接参数读取灰度图
gray1 = cv2.imread('1.jpg', cv2.IMREAD_GRAYSCALE) # 灰度图
cv2.imshow('gray1', gray1)
# 也可以这么写,先读入彩色图,再转灰度图
src = cv2.imread('1.jpg')
gray2 = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray2', gray2)<