目录
PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上
PIL进行图片的读取:使用Image.open()
如果直接用PIL进行图片的读取的话, 读出来的像素值在0-255之间,获取像素的函数是getpiex(),像素顺序是RGB
from PIL import Image
import numpy as np
if __name__ == '__main__':
src_path='img/street.jpg'
img = Image.open(src_path)
print(img.mode)
print(img.getpixel((11,121))) # 返回的是坐标点(11,121)处的red,green,blue的数值
print(img.size)
img_array=np.asarray(img)
print(img_array.shape)
输出结果:
RGB
(78, 80, 79)
(1330, 1330)
(1330, 1330, 3)
PIL读取的图片的格式为RGB,RGBA,P,L,如果需要转换,使用convert函数即可
convert('RGB')
convert('L')
convert('RGBA')
convert('P')
PIL读取的图片和numpy的相互转换
PIL转为numpy形式:
img_array=np.asarray(img)
PIL图像在转换为numpy.ndarray后,格式为(h,w,c),像素顺序为RGB;
将变成array的图片矩阵变回Image对象,使用Image中的fromarray方法
pil_img=Image.fromarray(np.uint8(img))
OPRENCV读取的图片
OpenCV在cv2.imread()后数据类型为numpy.ndarray,格式为(h,w,c),像素顺序为BGR。
import cv2
img_cv2_color = cv2.imread('street.jpg') # cv2读入的图像默认是uint8格式的numpy.darray, BGR通道
img_cv2_gray = cv2.imread('street.jpg', 0) # img_cv2_gray.shape (1330,1330),0是指按灰度图片读取
对于含有中文路径的图片读取
img = cv2.imdecode(np.fromfile(resize_jpg_path, dtype=np.uint8), flags=-1)
# resize_jpg_path图片路径
PIL读取的图片和OPRENCV读取的图片的相互转换
PIL读取的图片转换为cv格式下的图片,即通道有RGB变为BGR
img = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
cv格式的图片转为PIL格式的:
img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))